To invoke RVCT 4.0 and earlier behavior, you can define __use_rvct_matherr. Table 10 shows how the
math functions respond when supplied with out-of-range arguments.
Table 10. Mathematical functions in RVCT 4.0 and earlier
| Function | Condition | Returned value | Error number |
|---|
acos(x) | abs(x) > 1 | QNaN | EDOM |
asin(x) | abs(x) > 1 | QNaN | EDOM |
atan2(x,y) | x = 0, y = 0 | QNaN | EDOM |
atan2(x,y) | x = Inf, y = Inf | QNaN | EDOM |
cos(x) | x = Inf | QNaN | EDOM |
cosh(x) | Overflow | +Inf | ERANGE |
exp(x) | Overflow | +Inf | ERANGE |
exp(x) | Underflow | +0 | ERANGE |
fmod(x,y) | x = Inf | QNaN | EDOM |
fmod(x,y) | y = 0 | QNaN | EDOM |
log(x) | x < 0 | QNaN | EDOM |
log(x) | x = 0 | -Inf | EDOM |
log10(x) | x < 0 | QNaN | EDOM |
log10(x) | x = 0 | -Inf | EDOM |
pow(x,y) | Overflow | +Inf | ERANGE |
pow(x,y) | Underflow | 0 | ERANGE |
pow(x,y) | x = 0 or x = Inf, y = 0 | +1 | EDOM |
pow(x,y) | x = +0, y<0 | -Inf | EDOM |
pow(x,y) | x = -0, y < 0 and y integer | -Inf | EDOM |
pow(x,y) | x = -0, y < 0 and y non-integer | QNaN | EDOM |
pow(x,y) | x < 0, y non-integer | QNaN | EDOM |
pow(x,y) | x = 1, y = Inf | QNaN | EDOM |
sqrt(x) | x < 0 | QNaN | EDOM |
sin(x) | x = Inf | QNaN | EDOM |
sinh(x) | Overflow | +Inf | ERANGE |
tan(x) | x = Inf | QNaN | EDOM |
atan(x) | SNaN | SNaN | None |
ceil(x) | SNaN | SNaN | None |
floor(x) | SNaN | SNaN | None |
frexp(x) | SNaN | SNaN | None |
ldexp(x) | SNaN | SNaN | None |
modf(x) | SNaN | SNaN | None |
tanh(x) | SNaN | SNaN | None |
HUGE_VAL is an alias for Inf.
Consult the errno variable for the error number.
Other than the cases shown in Table 10, all functions return QNaN when
passed QNaN and throw an invalid operation exception
when passed SNaN.
The string passed to C99 nan() is ignored,
and the same Not a Number (NaN) is always returned, namely
the one with all fraction bits clear except the topmost one. The
sign bit is also clear. Passing strings of the form NAN(xxxx) to strtod has
the same effect.