summaryrefslogtreecommitdiff
path: root/libm/float/sqrtf.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-11-22 14:04:29 +0000
committerEric Andersen <andersen@codepoet.org>2001-11-22 14:04:29 +0000
commit7ce331c01ce6eb7b3f5c715a38a24359da9c6ee2 (patch)
tree3a7e8476e868ae15f4da1b7ce26b2db6f434468c /libm/float/sqrtf.c
parentc117dd5fb183afb1a4790a6f6110d88704be6bf8 (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/sqrtf.c')
-rw-r--r--libm/float/sqrtf.c140
1 files changed, 0 insertions, 140 deletions
diff --git a/libm/float/sqrtf.c b/libm/float/sqrtf.c
deleted file mode 100644
index bc75a907b..000000000
--- a/libm/float/sqrtf.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* sqrtf.c
- *
- * Square root
- *
- *
- *
- * SYNOPSIS:
- *
- * float x, y, sqrtf();
- *
- * y = sqrtf( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns the square root of x.
- *
- * Range reduction involves isolating the power of two of the
- * argument and using a polynomial approximation to obtain
- * a rough value for the square root. Then Heron's iteration
- * is used three times to converge to an accurate value.
- *
- *
- *
- * ACCURACY:
- *
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE 0,1.e38 100000 8.7e-8 2.9e-8
- *
- *
- * ERROR MESSAGES:
- *
- * message condition value returned
- * sqrtf domain x < 0 0.0
- *
- */
-
-/*
-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
-*/
-
-/* Single precision square root
- * test interval: [sqrt(2)/2, sqrt(2)]
- * trials: 30000
- * peak relative error: 8.8e-8
- * rms relative error: 3.3e-8
- *
- * test interval: [0.01, 100.0]
- * trials: 50000
- * peak relative error: 8.7e-8
- * rms relative error: 3.3e-8
- *
- * Copyright (C) 1989 by Stephen L. Moshier. All rights reserved.
- */
-#include <math.h>
-
-#ifdef ANSIC
-float frexpf( float, int * );
-float ldexpf( float, int );
-
-float sqrtf( float xx )
-#else
-float frexpf(), ldexpf();
-
-float sqrtf(xx)
-float xx;
-#endif
-{
-float f, x, y;
-int e;
-
-f = xx;
-if( f <= 0.0 )
- {
- if( f < 0.0 )
- mtherr( "sqrtf", DOMAIN );
- return( 0.0 );
- }
-
-x = frexpf( f, &e ); /* f = x * 2**e, 0.5 <= x < 1.0 */
-/* If power of 2 is odd, double x and decrement the power of 2. */
-if( e & 1 )
- {
- x = x + x;
- e -= 1;
- }
-
-e >>= 1; /* The power of 2 of the square root. */
-
-if( x > 1.41421356237 )
- {
-/* x is between sqrt(2) and 2. */
- x = x - 2.0;
- y =
- ((((( -9.8843065718E-4 * x
- + 7.9479950957E-4) * x
- - 3.5890535377E-3) * x
- + 1.1028809744E-2) * x
- - 4.4195203560E-2) * x
- + 3.5355338194E-1) * x
- + 1.41421356237E0;
- goto sqdon;
- }
-
-if( x > 0.707106781187 )
- {
-/* x is between sqrt(2)/2 and sqrt(2). */
- x = x - 1.0;
- y =
- ((((( 1.35199291026E-2 * x
- - 2.26657767832E-2) * x
- + 2.78720776889E-2) * x
- - 3.89582788321E-2) * x
- + 6.24811144548E-2) * x
- - 1.25001503933E-1) * x * x
- + 0.5 * x
- + 1.0;
- goto sqdon;
- }
-
-/* x is between 0.5 and sqrt(2)/2. */
-x = x - 0.5;
-y =
-((((( -3.9495006054E-1 * x
- + 5.1743034569E-1) * x
- - 4.3214437330E-1) * x
- + 3.5310730460E-1) * x
- - 3.5354581892E-1) * x
- + 7.0710676017E-1) * x
- + 7.07106781187E-1;
-
-sqdon:
-y = ldexpf( y, e ); /* y = y * 2**e */
-return( y);
-}