• 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
..
Xext Loading commit data...
ataricommon Loading commit data...
bwindow Loading commit data...
cocoa Loading commit data...
dc Loading commit data...
directfb Loading commit data...
dummy Loading commit data...
fbcon Loading commit data...
gapi Loading commit data...
gem Loading commit data...
ipod Loading commit data...
nanox Loading commit data...
nds Loading commit data...
os2fslib Loading commit data...
photon Loading commit data...
ps2gs Loading commit data...
riscos Loading commit data...
svga Loading commit data...
vgl Loading commit data...
win32 Loading commit data...
wscons Loading commit data...
x11 Loading commit data...
xbios Loading commit data...
SDL_RLEaccel.c Loading commit data...
SDL_RLEaccel_c.h Loading commit data...
SDL_blit.c Loading commit data...
SDL_blit.h Loading commit data...
SDL_blit_0.c Loading commit data...
SDL_blit_1.c Loading commit data...
SDL_blit_A.c Loading commit data...
SDL_blit_N.c Loading commit data...
SDL_blit_auto.c Loading commit data...
SDL_blit_auto.h Loading commit data...
SDL_blit_copy.c Loading commit data...
SDL_blit_copy.h Loading commit data...
SDL_blit_slow.c Loading commit data...
SDL_bmp.c Loading commit data...
SDL_fill.c Loading commit data...
SDL_gamma.c Loading commit data...
SDL_glesfuncs.h Loading commit data...
SDL_glfuncs.h Loading commit data...
SDL_leaks.h Loading commit data...
SDL_pixels.c Loading commit data...
SDL_pixels_c.h Loading commit data...
SDL_rect.c Loading commit data...
SDL_rect_c.h Loading commit data...
SDL_renderer_gl.c Loading commit data...
SDL_renderer_gl.h Loading commit data...
SDL_renderer_gles.c Loading commit data...
SDL_renderer_gles.h Loading commit data...
SDL_renderer_sw.c Loading commit data...
SDL_renderer_sw.h Loading commit data...
SDL_stretch.c Loading commit data...
SDL_stretch_c.h Loading commit data...
SDL_surface.c Loading commit data...
SDL_sysvideo.h Loading commit data...
SDL_video.c Loading commit data...
SDL_yuv_mmx.c Loading commit data...
SDL_yuv_sw.c Loading commit data...
SDL_yuv_sw_c.h Loading commit data...
e_log.h Loading commit data...
e_pow.h Loading commit data...
e_sqrt.h Loading commit data...
math_private.h Loading commit data...
mmx.h Loading commit data...
sdlgenblit.pl Loading commit data...