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/isnan.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/isnan.c')
-rw-r--r-- | libm/double/isnan.c | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/libm/double/isnan.c b/libm/double/isnan.c deleted file mode 100644 index 8ae83bcba..000000000 --- a/libm/double/isnan.c +++ /dev/null @@ -1,237 +0,0 @@ -/* isnan() - * signbit() - * isfinite() - * - * Floating point numeric utilities - * - * - * - * SYNOPSIS: - * - * double ceil(), floor(), frexp(), ldexp(); - * int signbit(), isnan(), isfinite(); - * double x, y; - * int expnt, n; - * - * y = floor(x); - * y = ceil(x); - * y = frexp( x, &expnt ); - * y = ldexp( x, n ); - * n = signbit(x); - * n = isnan(x); - * n = isfinite(x); - * - * - * - * DESCRIPTION: - * - * All four routines return a double precision floating point - * result. - * - * floor() returns the largest integer less than or equal to x. - * It truncates toward minus infinity. - * - * ceil() returns the smallest integer greater than or equal - * to x. It truncates toward plus infinity. - * - * frexp() extracts the exponent from x. It returns an integer - * power of two to expnt and the significand between 0.5 and 1 - * to y. Thus x = y * 2**expn. - * - * ldexp() multiplies x by 2**n. - * - * signbit(x) returns 1 if the sign bit of x is 1, else 0. - * - * These functions are part of the standard C run time library - * for many but not all C compilers. The ones supplied are - * written in C for either DEC or IEEE arithmetic. They should - * be used only if your compiler library does not already have - * them. - * - * The IEEE versions assume that denormal numbers are implemented - * in the arithmetic. Some modifications will be required if - * the arithmetic has abrupt rather than gradual underflow. - */ - - -/* -Cephes Math Library Release 2.3: March, 1995 -Copyright 1984, 1995 by Stephen L. Moshier -*/ - - -#include <math.h> - -#ifdef UNK -/* ceil(), floor(), frexp(), ldexp() may need to be rewritten. */ -#undef UNK -#if BIGENDIAN -#define MIEEE 1 -#else -#define IBMPC 1 -#endif -#endif - - -/* Return 1 if the sign bit of x is 1, else 0. */ - -int signbit(x) -double x; -{ -union - { - double d; - short s[4]; - int i[2]; - } u; - -u.d = x; - -if( sizeof(int) == 4 ) - { -#ifdef IBMPC - return( u.i[1] < 0 ); -#endif -#ifdef DEC - return( u.s[3] < 0 ); -#endif -#ifdef MIEEE - return( u.i[0] < 0 ); -#endif - } -else - { -#ifdef IBMPC - return( u.s[3] < 0 ); -#endif -#ifdef DEC - return( u.s[3] < 0 ); -#endif -#ifdef MIEEE - return( u.s[0] < 0 ); -#endif - } -} - - -/* Return 1 if x is a number that is Not a Number, else return 0. */ - -int isnan(x) -double x; -{ -#ifdef NANS -union - { - double d; - unsigned short s[4]; - unsigned int i[2]; - } u; - -u.d = x; - -if( sizeof(int) == 4 ) - { -#ifdef IBMPC - if( ((u.i[1] & 0x7ff00000) == 0x7ff00000) - && (((u.i[1] & 0x000fffff) != 0) || (u.i[0] != 0))) - return 1; -#endif -#ifdef DEC - if( (u.s[1] & 0x7fff) == 0) - { - if( (u.s[2] | u.s[1] | u.s[0]) != 0 ) - return(1); - } -#endif -#ifdef MIEEE - if( ((u.i[0] & 0x7ff00000) == 0x7ff00000) - && (((u.i[0] & 0x000fffff) != 0) || (u.i[1] != 0))) - return 1; -#endif - return(0); - } -else - { /* size int not 4 */ -#ifdef IBMPC - if( (u.s[3] & 0x7ff0) == 0x7ff0) - { - if( ((u.s[3] & 0x000f) | u.s[2] | u.s[1] | u.s[0]) != 0 ) - return(1); - } -#endif -#ifdef DEC - if( (u.s[3] & 0x7fff) == 0) - { - if( (u.s[2] | u.s[1] | u.s[0]) != 0 ) - return(1); - } -#endif -#ifdef MIEEE - if( (u.s[0] & 0x7ff0) == 0x7ff0) - { - if( ((u.s[0] & 0x000f) | u.s[1] | u.s[2] | u.s[3]) != 0 ) - return(1); - } -#endif - return(0); - } /* size int not 4 */ - -#else -/* No NANS. */ -return(0); -#endif -} - - -/* Return 1 if x is not infinite and is not a NaN. */ - -int isfinite(x) -double x; -{ -#ifdef INFINITIES -union - { - double d; - unsigned short s[4]; - unsigned int i[2]; - } u; - -u.d = x; - -if( sizeof(int) == 4 ) - { -#ifdef IBMPC - if( (u.i[1] & 0x7ff00000) != 0x7ff00000) - return 1; -#endif -#ifdef DEC - if( (u.s[3] & 0x7fff) != 0) - return 1; -#endif -#ifdef MIEEE - if( (u.i[0] & 0x7ff00000) != 0x7ff00000) - return 1; -#endif - return(0); - } -else - { -#ifdef IBMPC - if( (u.s[3] & 0x7ff0) != 0x7ff0) - return 1; -#endif -#ifdef DEC - if( (u.s[3] & 0x7fff) != 0) - return 1; -#endif -#ifdef MIEEE - if( (u.s[0] & 0x7ff0) != 0x7ff0) - return 1; -#endif - return(0); - } -#else -/* No INFINITY. */ -return(1); -#endif -} |