[Top][All Lists]
[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.