summaryrefslogtreecommitdiff
path: root/libm/fpmacros.c
diff options
context:
space:
mode:
Diffstat (limited to 'libm/fpmacros.c')
-rw-r--r--libm/fpmacros.c92
1 files changed, 46 insertions, 46 deletions
diff --git a/libm/fpmacros.c b/libm/fpmacros.c
index 0fa4f9e7e..78cc46e9a 100644
--- a/libm/fpmacros.c
+++ b/libm/fpmacros.c
@@ -1,6 +1,6 @@
/***********************************************************************
** File: fpmacros.c
-**
+**
** Contains: C source code for implementations of floating-point
** functions which involve float format numbers, as
** defined in header <fp.h>. In particular, this file
@@ -8,16 +8,16 @@
** __fpclassify(d,f), __isnormal(d,f), __isfinite(d,f),
** __isnan(d,f), and __signbit(d,f). This file targets
** PowerPC platforms.
-**
+**
** Written by: Robert A. Murley, Ali Sazegari
-**
+**
** Copyright: c 2001 by Apple Computer, Inc., all rights reserved
-**
+**
** Change History (most recent first):
**
-** 07 Jul 01 ram First created from fpfloatfunc.c, fp.c,
+** 07 Jul 01 ram First created from fpfloatfunc.c, fp.c,
** classify.c and sign.c in MathLib v3 Mac OS9.
-**
+**
***********************************************************************/
#include <features.h>
@@ -33,48 +33,48 @@
/***********************************************************************
int __fpclassifyf(float x) returns the classification code of the
argument x, as defined in <fp.h>.
-
+
Exceptions: INVALID signaled if x is a signaling NaN; in this case,
the FP_QNAN code is returned.
-
+
Calls: none
***********************************************************************/
int __fpclassifyf ( float x )
{
unsigned int iexp;
-
+
union {
u_int32_t lval;
float fval;
} z;
-
+
z.fval = x;
- iexp = z.lval & FEXP_MASK; /* isolate float exponent */
-
+ iexp = z.lval & FEXP_MASK; /* isolate float exponent */
+
if (iexp == FEXP_MASK) { /* NaN or INF case */
if ((z.lval & 0x007fffff) == 0)
return FP_INFINITE;
return FP_NAN;
}
-
+
if (iexp != 0) /* normal float */
return FP_NORMAL;
-
+
if (x == 0.0)
return FP_ZERO; /* zero */
else
return FP_SUBNORMAL; /* must be subnormal */
}
-
+
/***********************************************************************
- Function __fpclassify,
- Implementation of classify of a double number for the PowerPC.
-
+ Function __fpclassify,
+ Implementation of classify of a double number for the PowerPC.
+
Exceptions: INVALID signaled if x is a signaling NaN; in this case,
the FP_QNAN code is returned.
-
+
Calls: none
***********************************************************************/
@@ -86,16 +86,16 @@ int __fpclassify ( double arg )
dHexParts hex;
double dbl;
} x;
-
+
x.dbl = arg;
-
+
exponent = x.hex.high & dExpMask;
if ( exponent == dExpMask )
{
if ( ( ( x.hex.high & dHighMan ) | x.hex.low ) == 0 )
return FP_INFINITE;
else
- return FP_NAN;
+ return FP_NAN;
}
else if ( exponent != 0)
return FP_NORMAL;
@@ -111,10 +111,10 @@ int __fpclassify ( double arg )
/***********************************************************************
int __isnormalf(float x) returns nonzero if and only if x is a
normalized float number and zero otherwise.
-
+
Exceptions: INVALID is raised if x is a signaling NaN; in this case,
zero is returned.
-
+
Calls: none
***********************************************************************/
@@ -125,44 +125,44 @@ int __isnormalf ( float x )
u_int32_t lval;
float fval;
} z;
-
+
z.fval = x;
iexp = z.lval & FEXP_MASK; /* isolate float exponent */
return ((iexp != FEXP_MASK) && (iexp != 0));
}
-
+
int __isnormal ( double x )
{
- return ( __fpclassify ( x ) == FP_NORMAL );
+ return ( __fpclassify ( x ) == FP_NORMAL );
}
/***********************************************************************
int __isfinitef(float x) returns nonzero if and only if x is a
finite (normal, subnormal, or zero) float number and zero otherwise.
-
+
Exceptions: INVALID is raised if x is a signaling NaN; in this case,
zero is returned.
-
+
Calls: none
***********************************************************************/
int __finitef ( float x )
-{
+{
union {
u_int32_t lval;
float fval;
} z;
-
+
z.fval = x;
return ((z.lval & FEXP_MASK) != FEXP_MASK);
}
weak_alias (__finitef, finitef)
-
+
int __finite ( double x )
{
- return ( __fpclassify ( x ) >= FP_ZERO );
+ return ( __fpclassify ( x ) >= FP_ZERO );
}
weak_alias (__finite, finite)
@@ -170,28 +170,28 @@ weak_alias (__finite, finite)
/***********************************************************************
int __signbitf(float x) returns nonzero if and only if the sign
bit of x is set and zero otherwise.
-
+
Exceptions: INVALID is raised if x is a signaling NaN.
-
+
Calls: none
***********************************************************************/
int __signbitf ( float x )
-{
+{
union {
u_int32_t lval;
float fval;
} z;
-
+
z.fval = x;
return ((z.lval & SIGN_MASK) != 0);
}
/***********************************************************************
- Function sign of a double.
- Implementation of sign bit for the PowerPC.
-
+ Function sign of a double.
+ Implementation of sign bit for the PowerPC.
+
Calls: none
***********************************************************************/
@@ -252,20 +252,20 @@ weak_alias (__isinfl, isinfl);
/***********************************************************************
int __isnanf(float x) returns nonzero if and only if x is a
NaN and zero otherwise.
-
+
Exceptions: INVALID is raised if x is a signaling NaN; in this case,
nonzero is returned.
-
+
Calls: none
***********************************************************************/
int __isnanf ( float x )
-{
+{
union {
u_int32_t lval;
float fval;
} z;
-
+
z.fval = x;
return (((z.lval&FEXP_MASK) == FEXP_MASK) && ((z.lval&FFRAC_MASK) != 0));
}
@@ -274,7 +274,7 @@ weak_alias (__isnanf, isnanf);
int __isnan ( double x )
{
int class = __fpclassify(x);
- return ( class == FP_NAN );
+ return ( class == FP_NAN );
}
weak_alias (__isnan, isnan);
@@ -282,7 +282,7 @@ weak_alias (__isnan, isnan);
int __isnanl ( long double x )
{
int class = __fpclassify(x);
- return ( class == FP_NAN );
+ return ( class == FP_NAN );
}
weak_alias (__isnanl, isnanl);
#endif