diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-11-22 14:04:29 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-11-22 14:04:29 +0000 |
commit | 7ce331c01ce6eb7b3f5c715a38a24359da9c6ee2 (patch) | |
tree | 3a7e8476e868ae15f4da1b7ce26b2db6f434468c /libm/float/exp2f.c | |
parent | c117dd5fb183afb1a4790a6f6110d88704be6bf8 (diff) |
Totally rework the math library, this time based on the MacOs X
math library (which is itself based on the math lib from FreeBSD).
-Erik
Diffstat (limited to 'libm/float/exp2f.c')
-rw-r--r-- | libm/float/exp2f.c | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/libm/float/exp2f.c b/libm/float/exp2f.c deleted file mode 100644 index 0de21decd..000000000 --- a/libm/float/exp2f.c +++ /dev/null @@ -1,116 +0,0 @@ -/* exp2f.c - * - * Base 2 exponential function - * - * - * - * SYNOPSIS: - * - * float x, y, exp2f(); - * - * y = exp2f( x ); - * - * - * - * DESCRIPTION: - * - * Returns 2 raised to the x power. - * - * Range reduction is accomplished by separating the argument - * into an integer k and fraction f such that - * x k f - * 2 = 2 2. - * - * A polynomial approximates 2**x in the basic range [-0.5, 0.5]. - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -127,+127 100000 1.7e-7 2.8e-8 - * - * - * See exp.c for comments on error amplification. - * - * - * ERROR MESSAGES: - * - * message condition value returned - * exp underflow x < -MAXL2 0.0 - * exp overflow x > MAXL2 MAXNUMF - * - * For IEEE arithmetic, MAXL2 = 127. - */ - - -/* -Cephes Math Library Release 2.2: June, 1992 -Copyright 1984, 1987, 1988, 1992 by Stephen L. Moshier -Direct inquiries to 30 Frost Street, Cambridge, MA 02140 -*/ - - - -#include <math.h> -static char fname[] = {"exp2f"}; - -static float P[] = { - 1.535336188319500E-004, - 1.339887440266574E-003, - 9.618437357674640E-003, - 5.550332471162809E-002, - 2.402264791363012E-001, - 6.931472028550421E-001 -}; -#define MAXL2 127.0 -#define MINL2 -127.0 - - - -extern float MAXNUMF; - -float polevlf(float, float *, int), floorf(float), ldexpf(float, int); - -float exp2f( float xx ) -{ -float x, px; -int i0; - -x = xx; -if( x > MAXL2) - { - mtherr( fname, OVERFLOW ); - return( MAXNUMF ); - } - -if( x < MINL2 ) - { - mtherr( fname, UNDERFLOW ); - return(0.0); - } - -/* The following is necessary because range reduction blows up: */ -if( x == 0 ) - return(1.0); - -/* separate into integer and fractional parts */ -px = floorf(x); -i0 = px; -x = x - px; - -if( x > 0.5 ) - { - i0 += 1; - x -= 1.0; - } - -/* rational approximation - * exp2(x) = 1.0 + xP(x) - */ -px = 1.0 + x * polevlf( x, P, 5 ); - -/* scale by power of 2 */ -px = ldexpf( px, i0 ); -return(px); -} |