strtold("inf",NULL) returns a NaN

sisyphus1@optusnet.com.au sisyphus1@optusnet.com.au
Mon Jul 4 07:25:00 GMT 2016


-----Original Message----- 
From: Segher Boessenkool
Sent: Monday, July 04, 2016 1:25 PM
To: sisyphus1@optusnet.com.au
Cc: gcc-help@gcc.gnu.org
Subject: Re: strtold("inf",NULL) returns a NaN

> On Mon, Jul 04, 2016 at 11:45:42AM +1000, sisyphus1@optusnet.com.au wrote:
>> ld is:      7fff8000000000000000
>
> This is +Inf in 80-bit 8087 format.

After I had posted I started having second thoughts as to whether my 
summation was correct.

>> f128 is: 7fff8000000000000000000000000000
>
> This is a NaN in standard format (Inf would be
> 7fff0000000000000000000000000000).
>
>> It's only when this long double value is cast to __float128 that it 
>> behaves
>> as a NaN.
>>
>> Where to from here ?
>
> Look at the generated machine code for the cast?  The value returned from 
> strtold looks correct.

Yes, if strtold is returning correctly && __float128 
7fff8000000000000000000000000000 is Nan, then the bug must be in the cast.

One thing I do know is that appendix A of my 2010 edition of K&R's "The C 
Programming Language" (2nd edition) tells me:

[quote]
A6.4 Floating Types

When a less precise floating point value is converted to an equally or more 
precise floating type, the value is unchanged.
[end quote]

but that aint happening here.

Thanks, Segher.

Cheers,
Rob 



More information about the Gcc-help mailing list