bug-gnulib
[Top][All Lists]
Advanced

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

Re: [bug-gnulib] module for missing math.h functions?


From: Paul Eggert
Subject: Re: [bug-gnulib] module for missing math.h functions?
Date: Mon, 27 Nov 2006 15:53:24 -0800
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux)

>> Can substitutes in gnulib assume that the 'double' format is IEEE 754
>> (it is on all modern platforms; VAX was the last one with other formats) ?
>> Or should they be written in a slower, but more portable way?
>
> This question is actually vital.  If we can assume IEEE 754, then
> I can use implementations from glibc.  If we can't, then it is
> more difficult, and I will have to see how clever I can be.
>
> Do we have any opinions on this?

For other math.h functions it's a vital question, but you should be
able to implement trunc and round portably using ceil and floor, and
this should work correctly even for IEEE 754 hosts.  Something like
this:

   double
   rpl_trunc (double x)
   {
     return x < 0 ? ceil (x) : 0 < x ? floor (x) : x;
   }

   double
   rpl_round (double x)
   {
     if (x < 0)
       {
         double t = ceil (x);
         if (0.5 <= t - x)
           t--;
         return t;
       }
     else if (0 < x)
       {
         double t = floor (x);
         if (0.5 <= x - t)
           t++;
         return t;  
       }
     else
       return x;
   }

This is written so that it works correctly on +-zero, infinities, and
nans, assuming ceil and floor work.  Admittedly there are a lot of
tricky little bits here.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]