Sourceware Bugzilla – Bug 6808
yn() does not set errno for overflow error.
Last modified: 2012-07-25 11:00:26 UTC
For an overflow error, yn() correctly raise an exception, but does not set
errno. errno should be set to ERANGE.
Note: I haven't raised this bug against y0)_ and y1(), since, as far as I can
tell, one can't get overflow errors for these functions (on x86-32 at least).
For example, if the argument is DBL_MIN:
In passing, it is worth noting that yn() does correctly set errno and raise the
right exception at least one other error (domain error), and also sets errno
correctly for an underflow error.
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 2880 [details]
Sample run showing the problem:
$ /tmp/mt_yn 10 dbl_min
errno == 0
fetestexcept() says: FE_OVERFLOW FE_INEXACT
0 FE_OVERFLOW -inf
Confirmed with current sources on both x86 and x86_64.
I have a patch.