The calls remainder(x, 0) and remainder(inf, y) should both result in a domain error. For both of these calls, an invalid exception is correctly raised. However, errno is not set consistently. remainder(x, 0) does (correctly) set errno to EDOM. However, remainder(inf, y) does not set errno; it should do so. 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 2848 [details] test program sample runs showing problem. Note that EDOM is set in one case, but not the other. $ /tmp/mt_remainder -- inf 1 errno == 0 fetestexcept() says: FE_INVALID remainder(inf,1.00000000000000000e+00)=nan 0 FE_INVALID nan $ /tmp/mt_remainder -- 1 0 errno == EDOM fetestexcept() says: FE_INVALID remainder(1.00000000000000000e+00,0.00000000000000000e+00)=nan EDOM FE_INVALID nan
Thanks for the report. I just send a patch to the libc-alpha mailing list to fix this.
I checked in the patch.
Documented for man-pages-4.09.