123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /*******************************************************************************
- * *
- * File fp_private.h, *
- * All pack 4 dependencies for the MathLib elems plus some defines used *
- * throughout MathLib. *
- * *
- * Copyright © 1991 Apple Computer, Inc. All rights reserved. *
- * *
- * Written by Ali Sazegari, started on October 1991, *
- * *
- * W A R N I N G: This routine expects a 64 bit double model. *
- * *
- *******************************************************************************/
- #define NoException 0
- /*******************************************************************************
- * Values of constants. *
- *******************************************************************************/
- //#define SgnMask 0x8000
- #define dSgnMask 0x80000000
- #define sSgnMask 0x7FFFFFFF
- //#define ExpMask 0x7FFF
- #define dExpMask 0x7FF00000
- #define sExpMask 0xFF000000
- /* according to rounding BIG & SMALL are: */
- #define BIG 1.1e+300 /* used to deliver ±° or largest number, */
- #define SMALL 1.1e-300 /* used to deliver ±0 or smallest number. */
- #define InfExp 0x7FF
- #define dMaxExp 0x7FF00000
- #define MaxExpP1 1024
- #define MaxExp 1023
- #define DenormLimit -52
- //#define ManMask 0x80000000
- #define dManMask 0x00080000
- //#define IsItDenorm 0x80000000
- #define dIsItDenorm 0x00080000
- //#define xIsItSNaN 0x40000000
- #define dIsItSNaN 0x00080000
- #define dHighMan 0x000FFFFF
- #define dFirstBitSet 0x00080000
- #define BIAS 0x3FF
- //#define GetSign 0x8000
- #define dGetSign 0x80000000
- #define sGetSign 0x80000000
- //#define Infinity(x) ( x.hex.exponent & ExpMask ) == ExpMask
- #define dInfinity(x) ( x.hex.high & dExpMask ) == dExpMask
- #define sInfinity(x) ( ( x.hexsgl << 1 ) & sExpMask ) == sExpMask
- //#define Exponent(x) x.hex.exponent & ExpMask
- #define dExponent(x) x.hex.high & dExpMask
- #define sExponent(x) ( ( x.hexsgl << 1 ) & sExpMask )
- #define sZero(x) ( x.hexsgl & sSgnMask ) == 0
- //#define Sign(x) ( x.hex.exponent & SgnMask ) == SgnMask
- /*******************************************************************************
- * Types used in the auxiliary functions. *
- *******************************************************************************/
- typedef struct /* Hex representation of a double. */
- {
- #if defined(__BIG_ENDIAN__)
- unsigned long int high;
- unsigned long int low;
- #else
- unsigned long int low;
- unsigned long int high;
- #endif
- } dHexParts;
- typedef union
- {
- unsigned char byties[8];
- double dbl;
- } DblInHex;
- //enum boolean { FALSE, TRUE };
- /*******************************************************************************
- * Macros to access long subfields of a double value. *
- *******************************************************************************/
- #define highpartd(x) *((long *) &x)
- #define lowpartd(x) *((long *) &x + 1)
- enum {
- FP_SNAN = 0, /* signaling NaN
- */
- FP_QNAN = 1, /* quiet NaN
- */
- FP_INFINITE = 2, /* + or - infinity
- */
- FP_ZERO = 3, /* + or - zero
- */
- FP_NORMAL = 4, /* all normal numbers
- */
- FP_SUBNORMAL = 5 /* denormal numbers
- */
- };
|