Sources Bugzilla – Bug 6792
log1p() does not set errno n error
Last modified: 2012-02-29 20:12:25 UTC
on a pole error or a domain error, log1p correctly raises an exception. But errno is not set. It should be (respectively: ERANGE and EDOM) Background: On error, many glibc math functions both set errno and raise an exception (fetestexcept(3)). For example, the following function all do this: acos(), asin(), cosh(), sinh(), acosh(), asinh(), exp(), exp2(), ldexp(), log(), log10(), log2(). However, there is much inconsistency. Some functions raise an exception, but don't set errno. Some functions set errno for some errors, but not others. A few set errno, but don't raise an exception. This series of bug reports documents deviations from what I consider the ideal: all functions should BOTH set errno AND raise an exception for all errors. All of these reports relate to tests on glibc 2.8 (as provided by SUSE 11.0).
Created attachment 2854 [details] test program Sample runs demonstrating the problem $ /tmp/mt_log1p -- -1 errno == 0 fetestexcept() says: FE_DIVBYZERO log1p(-1.00000000000000000e+00)=-inf 0 FE_DIVBYZERO -inf $ /tmp/mt_log1p -- -2 errno == 0 fetestexcept() says: FE_INVALID log1p(-2.00000000000000000e+00)=nan 0 FE_INVALID nan
Confirmed with current sources, both x86 and x86_64.
*** Bug 5680 has been marked as a duplicate of this bug. ***