blob: 30b3e05725f617bc8e5dbea7dee956474ef75707 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
/*******************************************************************************
* *
* 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
*/
};
|