123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /*******************************************************************************
- * *
- * 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. *
- *******************************************************************************/
- #include <stdint.h>
- #include <endian.h>
- typedef struct /* Hex representation of a double. */
- {
- #if (__BYTE_ORDER == __BIG_ENDIAN)
- uint32_t high;
- uint32_t low;
- #else
- uint32_t low;
- uint32_t high;
- #endif
- } dHexParts;
- typedef union
- {
- unsigned char byties[8];
- double dbl;
- } DblInHex;
|