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/double/lsqrt.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/double/lsqrt.c')
-rw-r--r-- | libm/double/lsqrt.c | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/libm/double/lsqrt.c b/libm/double/lsqrt.c deleted file mode 100644 index bf85a54f1..000000000 --- a/libm/double/lsqrt.c +++ /dev/null @@ -1,85 +0,0 @@ -/* lsqrt.c - * - * Integer square root - * - * - * - * SYNOPSIS: - * - * long x, y; - * long lsqrt(); - * - * y = lsqrt( x ); - * - * - * - * DESCRIPTION: - * - * Returns a long integer square root of the long integer - * argument. The computation is by binary long division. - * - * The largest possible result is lsqrt(2,147,483,647) - * = 46341. - * - * If x < 0, the square root of |x| is returned, and an - * error message is printed. - * - * - * ACCURACY: - * - * An extra, roundoff, bit is computed; hence the result - * is the nearest integer to the actual square root. - * NOTE: only DEC arithmetic is currently supported. - * - */ - -/* -Cephes Math Library Release 2.0: April, 1987 -Copyright 1984, 1987 by Stephen L. Moshier -Direct inquiries to 30 Frost Street, Cambridge, MA 02140 -*/ - -#include <math.h> - -long lsqrt(x) -long x; -{ -long num, sq; -long temp; -int i, j, k, n; - -if( x < 0 ) - { - mtherr( "lsqrt", DOMAIN ); - x = -x; - } - -num = 0; -sq = 0; -k = 24; -n = 4; - -for( j=0; j<4; j++ ) - { - num |= (x >> k) & 0xff; /* bring in next byte of arg */ - if( j == 3 ) /* do roundoff bit at end */ - n = 5; - for( i=0; i<n; i++ ) - { - num <<= 2; /* next 2 bits of arg */ - sq <<= 1; /* shift up answer */ - temp = (sq << 1) + 256; /* trial divisor */ - temp = num - temp; - if( temp >= 0 ) - { - num = temp; /* it went in */ - sq += 256; /* answer bit = 1 */ - } - } - k -= 8; /* shift count to get next byte of arg */ - } - -sq += 256; /* add roundoff bit */ -sq >>= 9; /* truncate */ -return( sq ); -} |