ENH: handle underflow (rounding) of float/double as zero (issue #625)
- The problem occurs when using atof to parse values such as "1e-39" since this is out of range for a float and _can_ set errno to ERANGE. Similar to parsing of integers, now parse with the longest floating point representation "long double" via strtold (guaranteed to be part of C++11) and verify against the respective VGREAT values for overflow. Treat anything smaller than VSMALL to be zero.
Showing
- applications/test/primitives/Test-primitives.C 19 additions, 4 deletionsapplications/test/primitives/Test-primitives.C
- src/OpenFOAM/primitives/Scalar/Scalar.C 30 additions, 7 deletionssrc/OpenFOAM/primitives/Scalar/Scalar.C
- src/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.C 3 additions, 1 deletionsrc/OpenFOAM/primitives/Scalar/doubleScalar/doubleScalar.C
- src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.C 2 additions, 1 deletionsrc/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.C
Please register or sign in to comment