Skip to content

Commit ffef420

Browse files
pcaspersjenkins
authored andcommitted
QPR-12381 ensure inputs are in single precision limits
1 parent 0bc6396 commit ffef420

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

QuantExt/qle/math/openclenvironment.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,8 @@ std::size_t OpenClContext::createInputVariable(double v) {
458458
}
459459
inputVarOffset_.push_back(nextOffset);
460460
inputVarIsScalar_.push_back(true);
461-
inputVarValue_.push_back((float)v);
461+
inputVarValue_.push_back((float)std::max(std::min(v, (double)std::numeric_limits<float>::max()),
462+
-(double)std::numeric_limits<float>::max()));
462463
inputVarPtr_.push_back(nullptr);
463464
inputVarPtrVal_.push_back({});
464465
return nVars_++;
@@ -476,6 +477,9 @@ std::size_t OpenClContext::createInputVariable(double* v) {
476477
inputVarIsScalar_.push_back(false);
477478
inputVarValue_.push_back(0.0f);
478479
inputVarPtrVal_.push_back(std::vector<float>(size_[currentId_-1]));
480+
for (std::size_t i = 0; i < size_[currentId_ - 1]; ++i)
481+
v[i] = (float)std::max(std::min(v[i], (double)std::numeric_limits<float>::max()),
482+
-(double)std::numeric_limits<float>::max());
479483
std::copy(v, v + size_[currentId_ - 1], inputVarPtrVal_.back().begin());
480484
inputVarPtr_.push_back(&inputVarPtrVal_.back()[0]);
481485
return nVars_++;

0 commit comments

Comments
 (0)