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/atanf.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/atanf.c')
-rw-r--r-- | libm/float/atanf.c | 190 |
1 files changed, 0 insertions, 190 deletions
diff --git a/libm/float/atanf.c b/libm/float/atanf.c deleted file mode 100644 index 321e3be39..000000000 --- a/libm/float/atanf.c +++ /dev/null @@ -1,190 +0,0 @@ -/* atanf.c - * - * Inverse circular tangent - * (arctangent) - * - * - * - * SYNOPSIS: - * - * float x, y, atanf(); - * - * y = atanf( x ); - * - * - * - * DESCRIPTION: - * - * Returns radian angle between -pi/2 and +pi/2 whose tangent - * is x. - * - * Range reduction is from four intervals into the interval - * from zero to tan( pi/8 ). A polynomial approximates - * the function in this basic interval. - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -10, 10 100000 1.9e-7 4.1e-8 - * - */ -/* atan2f() - * - * Quadrant correct inverse circular tangent - * - * - * - * SYNOPSIS: - * - * float x, y, z, atan2f(); - * - * z = atan2f( y, x ); - * - * - * - * DESCRIPTION: - * - * Returns radian angle whose tangent is y/x. - * Define compile time symbol ANSIC = 1 for ANSI standard, - * range -PI < z <= +PI, args (y,x); else ANSIC = 0 for range - * 0 to 2PI, args (x,y). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -10, 10 100000 1.9e-7 4.1e-8 - * See atan.c. - * - */ - -/* atan.c */ - - -/* -Cephes Math Library Release 2.2: June, 1992 -Copyright 1984, 1987, 1989, 1992 by Stephen L. Moshier -Direct inquiries to 30 Frost Street, Cambridge, MA 02140 -*/ - -/* Single precision circular arcsine - * test interval: [-tan(pi/8), +tan(pi/8)] - * trials: 10000 - * peak relative error: 7.7e-8 - * rms relative error: 2.9e-8 - */ -#include <math.h> -extern float PIF, PIO2F, PIO4F; - -float atanf( float xx ) -{ -float x, y, z; -int sign; - -x = xx; - -/* make argument positive and save the sign */ -if( xx < 0.0 ) - { - sign = -1; - x = -xx; - } -else - { - sign = 1; - x = xx; - } -/* range reduction */ -if( x > 2.414213562373095 ) /* tan 3pi/8 */ - { - y = PIO2F; - x = -( 1.0/x ); - } - -else if( x > 0.4142135623730950 ) /* tan pi/8 */ - { - y = PIO4F; - x = (x-1.0)/(x+1.0); - } -else - y = 0.0; - -z = x * x; -y += -((( 8.05374449538e-2 * z - - 1.38776856032E-1) * z - + 1.99777106478E-1) * z - - 3.33329491539E-1) * z * x - + x; - -if( sign < 0 ) - y = -y; - -return( y ); -} - - - - -float atan2f( float y, float x ) -{ -float z, w; -int code; - - -code = 0; - -if( x < 0.0 ) - code = 2; -if( y < 0.0 ) - code |= 1; - -if( x == 0.0 ) - { - if( code & 1 ) - { -#if ANSIC - return( -PIO2F ); -#else - return( 3.0*PIO2F ); -#endif - } - if( y == 0.0 ) - return( 0.0 ); - return( PIO2F ); - } - -if( y == 0.0 ) - { - if( code & 2 ) - return( PIF ); - return( 0.0 ); - } - - -switch( code ) - { - default: -#if ANSIC - case 0: - case 1: w = 0.0; break; - case 2: w = PIF; break; - case 3: w = -PIF; break; -#else - case 0: w = 0.0; break; - case 1: w = 2.0 * PIF; break; - case 2: - case 3: w = PIF; break; -#endif - } - -z = atanf( y/x ); - -return( w + z ); -} - |