At Wed, 6 Nov 2019 13:56:46 +0900, Yuya Watari <watari.yuya@gmail.com> wrote in
> Hello Tom, Thomas, and Andrew,
>
> > Tom> That commit presumes that floats follow the IEEE bitwise
> > Tom> representation, I think;
> >
> > Correct. (It notably does _not_ make any assumptions about how floating
> > point arithmetic or comparisons work - all the computation is done in
> > integers.)
> >
> > Tom> but it's a long way from there to assuming that float comparisons
> > Tom> do something that is explicitly *not* promised by C99.
> >
> > I agree.
>
> Thank you for your comments. I agree that we should not assume
> anything that is not guaranteed in the language specification. The
> modified patch (attached in the previous e-mail) checks NaN explicitly
> if needed.
Mmm? See the bit in the patch cited below (v5).
+ /* Range check */
+ if (unlikely(!FLOAT8_FITS_IN_INT32(num)) || isnan(num))
If compiler doesn't any fancy, num is fed to an arithmetic before
checking if it is NaN. That seems have a chance of exception.
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center