-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Labels
bugSomething isn't workingSomething isn't workingfixedSomething works now, yay!Something works now, yay!
Description
Incorerct const float values in x_values.cpp files?
There are several constants from xfvalues.cpp, xlvalues.cpp, xvalues.cpp:
extern const float _FXbig = (NBITS + 1) * 347L / 1000;
extern const double _Xbig = (NBITS + 1) * 347L / 1000;
extern const long double _LXbig = (NBITS + 1) * 347L / 1000;
A diffrerence only in NBITS value and result type.
But all this constants (_FXbig, _Xbig, _LXbig) ignores fractional part.
for example:
extern const float _FXbig = (NBITS + 1) * 347L / 1000; // _FXbig == 8.0f;
In fact _FXbig should equel to 8.32800... if use cast to float:
extern const float _FXbig = static_cast<float>(NBITS + 1) * 347L / 1000;
This values are used to calculate sin(complex)/cos(complex): xlsinh.cpp
_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _LSinh(long double x, long double y) {
// compute y * sinh(x), |y| <= 1
...
default: // finite
...
if (x < _LRteps._Long_double) {
x *= y; // x tiny
} else if (x < 1.0L) {
long double w = x * x;
x += x * w * _LPoly(w, p, NP - 1);
x *= y;
} else if (x < _LXbig) { // worth adding in exp(-x)
_LExp(&x, 1.0L, -1);
x = y * (x - 0.25L / x);
} else {
...
}
...
}
Because I have not test cases to check, I just reported this issue as a question.
Does the loss of accuracy affect the result?
@statementreply
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingfixedSomething works now, yay!Something works now, yay!