Re: ieee754[sd]p_neg workaround

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 20 Apr 2005, Atsushi Nemoto wrote:

> I have a long standing patch for FPU emulator to fix a segmentation
> fault in pow() library function.
> 
> Here is a test program to reproduce it.
> 
> main()
> {
> 	union {
> 		double d;
> 		struct {
> #ifdef __MIPSEB
> 			unsigned int high, low;
> #else
> 			unsigned int low, high;
> #endif
> 		} i;
> 	} x, y, z;
>         x.i.low = 0x00000000;
>         x.i.high = 0xfff00001;
>         y.i.low = 0x80000000;
>         y.i.high = 0xcff00000;
>         z.d = pow(x.d, y.d);
>         printf("%x %x\n", z.i.high, z.i.low);
>         return 0;
> }
> 
> 
> If you run this program, you will get segmentation fault (unless your
> FPU does not raise Unimplemented exception for NaN operands).  The
> segmentation fault is caused by endless recursion in __ieee754_pow().
> 
> It looks glibc's pow() assume unary '-' operation for any number
> (including NaN) always invert its sign bit.

 AFAICS, the IEEE 754 standard explicitly leaves interpretation of the 
sign bit for NaNs as unspecified.  Therefore our implementation is correct 
and its glibc that should be fixed instead.  Please file a bug report 
against glibc.

  Maciej


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux