On Tue, Jan 27, 2009 at 10:58, Nicholas Clark <nw...@colon.colondot.net> wrote:
> On Tue, Jan 27, 2009 at 10:24:46AM -0800, parti...@cvs.perl.org wrote:
>
>> -                            gen_sprintf_call(tc, &info, ch);
>> -                            ts = cstr2pstr(tc);
>> +                            /* check for Inf and NaN values */
>> +                            if (thefloat == PARROT_FLOATVAL_INF_POSITIVE) {
>> +                                ts = cstr2pstr(PARROT_CSTRING_INF_POSITIVE);
>> +                            }
>> +                            else if (thefloat == 
>> PARROT_FLOATVAL_INF_NEGATIVE) {
>> +                                ts = cstr2pstr(PARROT_CSTRING_INF_NEGATIVE);
>> +                            }
>> +                            /* XXX for some reason, this comparison isn't 
>> working
>> +                            else if (thefloat == PARROT_FLOATVAL_NAN_QUIET) 
>> {
>
> No, it is working :-)
>
> NaN != NaN.
>
> Hence why <=> has 4 possible return values.
>
>> +                                ts = cstr2pstr(PARROT_CSTRING_NAN_QUIET);
>> +                            }
>> +                            */
>> +                            else if (thefloat != thefloat) {
>
> The above is the valid test for a NaN.
>
> Note, Intel chose that the default optimiser setting on their compiler should
> be buggy. (Advice from Klortho #11912). The perl 5 Linux hints file suggests
> that one needs to add -we147 to enable correct floating point behaviour.
>
> The best test that I'm aware of for "is it NaN or Inf?" is val != val * 0;
> Then, NaN is val != val, +Inf is val > 0, -Inf is val < 0;
>
thanks! patched up in r36071 and r36072.
~jerry

Reply via email to