y0/y1/yn and exceptions - GCC 3.4 changes
Andreas Jaeger
aj@suse.de
Sun Dec 28 10:19:00 GMT 2003
Andreas Schwab <schwab@suse.de> writes:
> Roger Sayle <roger@eyesopen.com> writes:
>
>> Of course, this issue applies to y0, y1 and yn, and the above changes
>> will need to be made consistently to flt-32, dbl-64, ldbl-96 and ldbl-128.
>
> The same issue exists with exp, exp10 and tgamma (on ppc):
And on x86-64 where I tested the patch below.
> Failure: exp (NaN) == NaN: Exception "Invalid operation" set
> Failure: exp10 (NaN) == NaN: Exception "Invalid operation" set
> Failure: tgamma (NaN) == NaN: Exception "Invalid operation" set
This comes from sysdeps/ieee754/dbl-64/e_exp.c:
if (n > infint) return(zero/zero); /* x is NaN, return invalid */
IMO we should return just the Nan without raising execptions.
Ok to commit the appended patch? This fixes all three problems above.
Andreas
2003-12-28 Andreas Jaeger <aj@suse.de>
* sysdeps/ieee754/dbl-64/e_exp.c: Do not raise execptions for
exp(NaN).
============================================================
Index: sysdeps/ieee754/dbl-64/e_exp.c
--- sysdeps/ieee754/dbl-64/e_exp.c 26 Aug 2002 22:40:36 -0000 1.8
+++ sysdeps/ieee754/dbl-64/e_exp.c 28 Dec 2003 10:15:50 -0000
@@ -92,10 +92,10 @@ double __ieee754_exp(double x) {
if (n <= smallint) return 1.0;
if (n >= badint) {
- if (n > infint) return(zero/zero); /* x is NaN, return invalid */
+ if (n > infint) return(x+x); /* x is NaN */
if (n < infint) return ( (x>0) ? (hhuge*hhuge) : (tiny*tiny) );
/* x is finite, cause either overflow or underflow */
- if (junk1.i[LOW_HALF] != 0) return (zero/zero); /* x is NaN */
+ if (junk1.i[LOW_HALF] != 0) return (x+x); /* x is NaN */
return ((x>0)?inf.x:zero ); /* |x| = inf; return either inf or 0 */
}
--
Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
SuSE Linux AG, Maxfeldstr. 5, 90409 Nürnberg, Germany
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 188 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20031228/dac17900/attachment.sig>
More information about the Libc-alpha
mailing list