38#define double80(x) Real64 x; short x##_pad
74 double GS_API x80todNNA(
const extended80 *x80);
75 void GS_API dtox80NNA(
const double *x, extended80 *x80);
92 if (((
size_t)p % 4) != 0)
93 DSTOP((kBruce,
"Misaligned floating point access to %s - SERIOUS PERFORMANCE PENALTY!", name));
95#define ASSERT4BYTEALIGNMENT(p, s) ASSERT4BYTEALIGNMENT(p, s)
99#define ASSERT4BYTEALIGNMENT(p, s) DEBUG_DO_NOTHING
128 return (x > 32767) ? (short) 32767 :
129 (x < -32767) ? (
short) -32767 :
130 (x > 0) ? (
short) (x + 0.5000000001) :
131 (x < 0) ? (
short) (x - 0.5000000001) :
137 BUG_ONLY(
void AssertDoubleToLong(
double x));
143 return (x > INT32_MAX) ? (
Sint32) INT32_MAX :
144 (x < INT32_MIN) ? (
Sint32) INT32_MIN:
145 (x > 0) ? (
Sint32) (x + 0.5) :
146 (x < 0) ? (
Sint32) (x - 0.5) :
184#define FLOATDECIMAL ((char)(0))
185#define FIXEDDECIMAL ((char)(1))
195 unsigned char length;
196 unsigned char text[SIGDIGLEN];
197 unsigned char unused;
207 void num2dec(
const decform *f,
double x, decimal *d);
208 double dec2num(
const decimal *d);
214 GREATERTHAN = ( ( relop ) ( 0 ) ),
231inline bool IsNAN (
double v) {
return _isnan(v)!=0; }
232inline bool IsFinite (
double v) {
return _finite(v)!=0; }
233inline bool IsInfinite (
double v) {
return !_finite(v)==0; }
245#define FLOATDECIMAL ((char)(0))
246#define FIXEDDECIMAL ((char)(1))
256 unsigned char length;
257 unsigned char text[SIGDIGLEN];
258 unsigned char unused;
268 void num2dec(
const decform *f,
double x, decimal *d);
269 double dec2num(
const decimal *d);
275GREATERTHAN = ( ( relop ) ( 0 ) ),
290inline bool IsNAN (
double v) {
return std::isnan(v); }
291inline bool IsFinite (
double v) {
return std::isfinite(v); }
292inline bool IsInfinite (
double v) {
return !std::isfinite(v); }
299inline bool IsNAN (
double v) {
return std::isnan(v); }
300inline bool IsFinite (
double v) {
return std::isfinite(v); }
301inline bool IsInfinite (
double v) {
return !std::isfinite(v); }
376 char *pb1 = (
char *) pld;
377 char *pb2 = pb1 +
sizeof(
Real64) - 1;
472 double abs_n1 =
Fabs(n1);
473 double abs_n2 =
Fabs(n2);
474 double abs_n1n2 =
Fabs(n1 - n2);
476 if ((abs_n1 <= epsilon) || (abs_n2 <= epsilon))
477 return (abs_n1n2 <= epsilon);
480 return (abs_n1n2 <= ( abs_n1 > abs_n2 ? abs_n1 : abs_n2 ) * epsilon);
519 return (fabs(a-b) < tolerance);
551 if ((n1 == 0) || (n2 == 0))
573 double Modf(
const double inNum,
double* outIntegralPart,
584 double pinnedDouble = PinTo<float>(
kEveryone, dblVal);
587 return (
float) pinnedDouble;
unsigned char Bool8
Definition GSTypes.h:79
int32_t Sint32
Definition GSTypes.h:36
float Real32
Definition GSTypes.h:65
double Real64
Definition GSTypes.h:66
unsigned char Boolean
Definition GSTypes.h:111
#define ASSERT4BYTEALIGNMENT(p, s)
Definition MCFloat.h:99
#define Fabs
Definition MCFloat.h:430
#define DSTOP(params)
Definition StdAfx.h:38
#define ASSERTN(x, y)
Definition StdAfx.h:37
#define GS_API
Definition StdAfx.h:46
#define kEveryone
Definition StdAfx.h:43
Boolean NormalizedValueIsNearlyZero(double n)
Definition MCFloat.h:557
bool IsLegal(double v)
Definition MCFloat.h:311
Sint32 FPClassify(double v)
Definition MCFloat.h:302
BUG_ONLY(void AssertNum2Short(double x))
void GS_API ByteSwapEXTENDED80(extended80_gs *p)
bool NearlyEqualFixedTolerance(double a, double b, double tolerance)
Definition MCFloat.h:515
Boolean IsANormalizedValue(double n)
Definition MCFloat.h:522
double WholeNumberDigitsPow10PinE16(double_param inValue)
bool IsNAN(double v)
Definition MCFloat.h:299
Boolean Double1_LE_Double2(double n1, double n2)
Definition MCFloat.h:503
EFPDirection
Definition MCFloat.h:345
@ kConvert64to80FP
Definition MCFloat.h:346
@ kConvert80to64FP
Definition MCFloat.h:347
Boolean Double1_GT_Double2(double n1, double n2)
Definition MCFloat.h:498
const float_gs float_param
Definition MCFloat.h:40
double Modf(const double inNum, double *outIntegralPart, const double inEpsilon=kNearlyEqualEpsilonForDoubles)
double NNAFix2X(NNAFixed x)
EFPByteOrder ByteOrder(Bool8 needsSwapping)
Definition MCFloat.h:417
NNAFract NNAFracMul(NNAFract x, NNAFract y)
const double_gs double_param
Definition MCFloat.h:41
short WholeNumberDigitsPin16(double_param inValue)
void ByteSwapFP(void *fpValue, EByteSwapFPMode fpFormat)
Definition MCFloat.h:398
force_inline short Num2Short(double x)
Definition MCFloat.h:124
NNAFixed NNAX2Fix(double x)
const double kNearlyEqualEpsilonForDoubles
Definition MCFloat.cpp:14
Boolean NormalizedValueIsNearlyOne(double n)
Definition MCFloat.h:562
double NNAFrac2X(NNAFract x)
Sint32 NNAFixed
Definition MCFloat.h:608
EByteSwapFPMode ByteSwapFPMode(Bool8 archaicDouble)
Definition MCFloat.h:390
Boolean DoubleIsNearlyZero(double n)
Definition MCFloat.h:483
bool IsIllegal(double v)
Definition MCFloat.h:312
bool IsFinite(double v)
Definition MCFloat.h:300
Real32 float_gs
Definition MCFloat.h:36
EByteSwapFPMode
Definition MCFloat.h:357
@ kArchaicFP
Definition MCFloat.h:359
@ kModernFP
Definition MCFloat.h:358
Boolean DoublesAreNotNearlyEqual(double n1, double n2)
Definition MCFloat.h:488
Sint32 NNAFract
Definition MCFloat.h:609
NNAFixed NNALong2Fix(Sint32 x)
Boolean Double1_LT_Double2(double n1, double n2)
Definition MCFloat.h:508
force_inline float DoubleToFloat(double dblVal)
Definition MCFloat.h:578
NNAFract NNAX2Frac(double x)
bool IsZeroOrDenormal(double v)
Definition MCFloat.h:313
EFPByteOrder
Definition MCFloat.h:351
@ kNeedsByteSwapping
Definition MCFloat.h:352
@ kNativeByteOrder
Definition MCFloat.h:353
Sint32 DoubleToLong(double x)
Definition MCFloat.h:139
bool IsInfinite(double v)
Definition MCFloat.h:301
void ByteSwapDoubleMAF(double *pld)
Definition MCFloat.h:373
Real64 double_gs
Definition MCFloat.h:35
const double kNearlyEqualEpsilonForNormalizedValues
Definition MCFloat.cpp:15
short WholeNumberDigits(double_param inValue)
Boolean Double1_GE_Double2(double n1, double n2)
Definition MCFloat.h:493
void ByteSwapDOUBLE80(extended80_gs *p)
Definition MCFloat.h:334
force_inline Boolean DoublesAreNearlyEqual(const double &n1, const double &n2, double epsilon=kNearlyEqualEpsilonForDoubles)
Definition MCFloat.h:463
Boolean NormalizedValuesAreNearlyEqual(double n1, double n2)
Definition MCFloat.h:545
short w[5]
Definition MCFloat.h:67