Floating-point primitives
Microsoft-specific primitive functions that are used to implement some standard C runtime library (CRT) floating-point functions. They're documented here for completeness, but aren't recommended for use. Some of these functions are noted as unused, because they're known to have issues in precision, exception handling, and conformance to IEEE-754 behavior. They exist in the library only for backward compatibility. For correct behavior, portability, and adherence to standards, prefer the standard floating-point functions over these functions.
By default, this function's global state is scoped to the application. To change this behavior, see Global state in the CRT.
_dclass
, _ldclass
, _fdclass
Syntax
short __cdecl _dclass(double x);
short __cdecl _ldclass(long double x);
short __cdecl _fdclass(float x);
Parameters
x
Floating-point function argument.
Remarks
These floating-point primitives implement the C versions of the CRT macro fpclassify
for floating-point types. The classification of the argument x
is returned as one of these constants, defined in math.h:
Value | Description |
---|---|
FP_NAN |
A quiet, signaling, or indeterminate NaN |
FP_INFINITE |
A positive or negative infinity |
FP_NORMAL |
A positive or negative normalized non-zero value |
FP_SUBNORMAL |
A positive or negative subnormal (denormalized) value |
FP_ZERO |
A positive or negative zero value |
For more detail, you can use the Microsoft-specific _fpclass
, _fpclassf
functions. Use the fpclassify
macro or function for portability.
_dsign
, _ldsign
, _fdsign
Syntax
int __cdecl _dsign(double x);
int __cdecl _ldsign(long double x);
int __cdecl _fdsign(float x);
Parameters
x
Floating-point function argument.
Remarks
These floating-point primitives implement the signbit
macro or function in the CRT. They return a non-zero value if the sign bit is set in the significand (mantissa) of the argument x
. Otherwise, they return 0 if the sign bit isn't set.
_dpcomp, _ldpcomp, _fdpcomp
Syntax
int __cdecl _dpcomp(double x, double y);
int __cdecl _ldpcomp(long double x, long double y);
int __cdecl _fdpcomp(float x, float y);
Parameters
x
, y
Floating-point function arguments.
Remarks
These floating-point primitives take two arguments, x
and y
, and return a value that shows their ordering relationship, expressed as the bitwise or of these constants, defined in math.h:
Value | Description |
---|---|
_FP_LT |
x can be considered less than y |
_FP_EQ |
x can be considered equal to y |
_FP_GT |
x can be considered greater than y |
These primitives implement the isgreater
, isgreaterequal
, isless
, islessequal
, islessgreater
, and isunordered
macros and functions in the CRT.
_dtest, _ldtest, _fdtest
Syntax
short __cdecl _dtest(double* px);
short __cdecl _ldtest(long double* px);
short __cdecl _fdtest(float* px);
Parameters
px
Pointer to a floating-point argument.
Remarks
These floating-point primitives implement the C++ versions of the CRT function fpclassify
for floating-point types. The argument x
is evaluated and the classification is returned as one of these constants, defined in math.h:
Value | Description |
---|---|
FP_NAN |
A quiet, signaling, or indeterminate NaN |
FP_INFINITE |
A positive or negative infinity |
FP_NORMAL |
A positive or negative normalized non-zero value |
FP_SUBNORMAL |
A positive or negative subnormal (denormalized) value |
FP_ZERO |
A positive or negative zero value |
For more detail, you can use the Microsoft-specific _fpclass
, _fpclassf
functions. Use the fpclassify
function for portability.
_d_int, _ld_int, _fd_int
Syntax
short __cdecl _d_int(double* px, short exp);
short __cdecl _ld_int(long double* px, short exp);
short __cdecl _fd_int(float* px, short exp);
Parameters
px
Pointer to a floating-point argument.
exp
An exponent as an integral type.
Remarks
These floating-point primitives take a pointer to a floating-point value px
and an exponent value exp
, and remove the fractional part of the floating-point value below the given exponent, if possible. The value returned is the result of fpclassify
on the input value in px
if it's a NaN or infinity, and on the output value in px
otherwise.
_dscale, _ldscale, _fdscale
Syntax
short __cdecl _dscale(double* px, long exp);
short __cdecl _ldscale(long double* px, long exp);
short __cdecl _fdscale(float* px, long exp);
Parameters
px
Pointer to a floating-point argument.
exp
An exponent as an integral type.
Remarks
These floating-point primitives take a pointer to a floating-point value px
and an exponent value exp
, and scale the value in px
by 2exp
, if possible. The value returned is the result of fpclassify
on the input value in px
if it's a NaN or infinity, and on the output value in px
otherwise. For portability, prefer the ldexp
, ldexpf
, ldexpl
functions.
_dunscale, _ldunscale, _fdunscale
Syntax
short __cdecl _dunscale(short* pexp, double* px);
short __cdecl _ldunscale(short* pexp, long double* px);
short __cdecl _fdunscale(short* pexp, float* px);
Parameters
pexp
A pointer to an exponent as an integral type.
px
Pointer to a floating-point argument.
Remarks
These floating-point primitives break down the floating-point value pointed at by px
into a significand (mantissa) and an exponent, if possible. The significand is scaled such that the absolute value is greater than or equal to 0.5 and less than 1.0. The exponent is the value n
, where the original floating-point value is equal to the scaled significand times 2n. This integer exponent n
is stored at the location pointed to by pexp
. The value returned is the result of fpclassify
on the input value in px
if it's a NaN or infinity, and on the output value otherwise. For portability, prefer the frexp
, frexpf
, frexpl
functions.
_dexp, _ldexp, _fdexp
Syntax
short __cdecl _dexp(double* px, double y, long exp);
short __cdecl _ldexp(long double* px, long double y, long exp);
short __cdecl _fdexp(float* px, float y, long exp);
Parameters
y
Floating-point function argument.
px
Pointer to a floating-point argument.
exp
An exponent as an integral type.
Remarks
These floating-point primitives construct a floating-point value in the location pointed at by px
equal to y
* 2exp. The value returned is the result of fpclassify
on the input value in y
if it's a NaN or infinity, and on the output value in px
otherwise. For portability, prefer the ldexp
, ldexpf
, ldexpl
functions.
_dnorm, _fdnorm
Syntax
short __cdecl _dnorm(unsigned short* ps);
short __cdecl _fdnorm(unsigned short* ps);
Parameters
ps
Pointer to the bitwise representation of a floating-point value expressed as an array of unsigned short
.
Remarks
These floating-point primitives normalize the fractional part of an underflowed floating-point value and adjust the characteristic, or biased exponent, to match. The value is passed as the bitwise representation of the floating-point type converted to an array of unsigned short
through the _double_val
, _ldouble_val
, or _float_val
type-punning union declared in math.h. The return value is the result of fpclassify
on the input floating-point value if it's a NaN or infinity, and on the output value otherwise.
_dpoly, _ldpoly, _fdpoly
Syntax
double __cdecl _dpoly(double x, double const* table, int n);
long double __cdecl _ldpoly(long double x, long double const* table, int n);
float __cdecl _fdpoly(float x, _float const* table, int n);
Parameters
x
Floating-point function argument.
table
Pointer to a table of constant coefficients for a polynomial.
n
Order of the polynomial to evaluate.
Remarks
These floating-point primitives return the evaluation of x
in the polynomial of order n
whose coefficients are represented by the corresponding constant values in table
. For example, if table[0]
= 3.0, table[1]
= 4.0, table[2]
= 5.0, and n
= 2, it represents the polynomial 5.0x2 + 4.0x + 3.0. If this polynomial is evaluated for x
of 2.0, the result is 31.0. These functions aren't used internally.
_dlog, _dlog, _dlog
Syntax
double __cdecl _dlog(double x, int base_flag);
long double __cdecl _ldlog(long double x, int base_flag);
float __cdecl _fdlog(float x, int base_flag);
Parameters
x
Floating-point function argument.
base_flag
Flag that controls the base to use, 0 for base e and non-zero for base 10.
Remarks
These floating-point primitives return the natural log of x
(ln(x) or loge(x)), when base_flag
is 0. They return the log base 10 of x
, or log10(x), when base_flag
is non-zero. These functions aren't used internally. For portability, prefer the functions log
, logf
, logl
, log10
, log10f
, and log10l
.
_dsin, _ldsin, _fdsin
Syntax
double __cdecl _dsin(double x, unsigned int quadrant);
long double __cdecl _ldsin(long double x, unsigned int quadrant);
float __cdecl _fdsin(float x, unsigned int quadrant);
Parameters
x
Floating-point function argument.
quadrant
Quadrant offset of 0, 1, 2, or 3 to use to produce sin
, cos
, -sin
, and -cos
results.
Remarks
These floating-point primitives return the sine of x
offset by the quadrant
modulo 4. Effectively, they return the sine, cosine, -sine, and -cosine of x
when quadrant
modulo 4 is 0, 1, 2, or 3, respectively. These functions aren't used internally. For portability, prefer the sin
, sinf
, sinl
, cos
, cosf
, cosl
functions.
Requirements
Header: <math.h>
For more compatibility information, see Compatibility.
See also
Math and floating-point support
fpclassify
_fpclass
, _fpclassf
isfinite
, _finite
, _finitef
isinf
isnan
, _isnan
, _isnanf
isnormal
cos
, cosf
, cosl
frexp
, frexpf
, frexpl
ldexp
, ldexpf
, ldexpl
log
, logf
, logl
, log10
, log10f
, log10l
sin
, sinf
, sinl