• Sam Lantinga's avatar
    http://sources.redhat.com/ml/newlib/2002/msg00230.html · 5f94466c
    Sam Lantinga authored
    Stephen L Moshier wrote:
    >
    > pow(x,y) returns 0 when x is very close to -1.0 and y is very large.
    > The following test program prints
    >
    > pow(1.0000000000000002e+00 4.5035996273704970e+15) = 2.7182818284590455e+00
    > pow(-1.0000000000000002e+00 4.5035996273704970e+15) =0.0000000000000000e+00
    > pow(9.9999999999999978e-01 4.5035996273704970e+15) = 3.6787944117144222e-01
    > pow(-9.9999999999999978e-01 4.5035996273704970e+15) = 0.0000000000000000e+00
    >
    > which is incorrect for the negative arguments raised to an odd integer
    > power.
    >
    > -----
    > double pow (double, double);
    >
    > int
    > main ()
    > {
    >   double x, y, z;
    >
    >   x = 1.0 + pow (2.0, -52.0);
    >   y = 1.0 + pow (2.0, 52.0);
    >   z = pow (x, y);
    >   printf ("pow(%.16e %.16e) = %.16e\n", x, y, z);
    >   x = -x;
    >   z = pow (x, y);
    >   printf ("pow(%.16e %.16e) = %.16e\n", x, y, z);
    >   x = 1.0 - pow (2.0, -52.0);
    >   z = pow (x, y);
    >   printf ("pow(%.16e %.16e) = %.16e\n", x, y, z);
    >   x = -x;
    >   z = pow (x, y);
    >   printf ("pow(%.16e %.16e) = %.16e\n", x, y, z);
    > }
    > -----
    >
    > Here is a patch for newlib/libm/math/epow.c:
    
    Patch checked in and duplicated for ef_pow.c.  Thanks.
    
    -- Jeff J.
    
    --HG--
    extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403207
    5f94466c
Name
Last commit
Last update
..
audio Loading commit data...
cdrom Loading commit data...
cpuinfo Loading commit data...
events Loading commit data...
file Loading commit data...
haptic Loading commit data...
joystick Loading commit data...
loadso Loading commit data...
main Loading commit data...
stdlib Loading commit data...
thread Loading commit data...
timer Loading commit data...
video Loading commit data...
SDL.c Loading commit data...
SDL_compat.c Loading commit data...
SDL_error.c Loading commit data...
SDL_error_c.h Loading commit data...
SDL_fatal.c Loading commit data...
SDL_fatal.h Loading commit data...