Bug in std::floor?
Marc Glisse
marc.glisse@inria.fr
Fri Nov 10 04:59:00 GMT 2017
On Fri, 10 Nov 2017, Nil Geisweiller wrote:
> On 11/09/2017 05:53 PM, Vincent Lefevre wrote:> For instance:
>>
>> #include <stdio.h>
>> #include <math.h>
>>
>> int main (void)
>> {
>> double x = 1.7;
>>
>> printf ("%.30g\n", x);
>> printf ("%.30g\n", 100 * x);
>> printf ("%.30g\n", floor (100 * x));
>> return 0;
>> }
>>
>> outputs:
>>
>> 1.69999999999999995559107901499
>> 170
>> 170
>
> Indeed! I would really like to have a look at the floor implementation, but
> it has proven difficult. It calls __builtin_floor, that is no where to be
> found. It seems to be implemented in gcc/builtins.c but it's too obfuscated
> for me to understand.
Look at the generated asm? Here, it is a single instruction: roundsd.
For constant folding, you would want to look at real.c.
builtins.c essentially delegates the work to each target to specify how
floor should be expanded, and generates a call to the system's C library
when that's not specified.
--
Marc Glisse
More information about the Gcc-help
mailing list