浮点基元
用于实现某些标准 C 运行时库 (CRT) 浮点函数的 Microsoft 特定基元函数。 本文出于完整性而介绍了这些函数,但不建议使用它们。 其中一些函数已注明为“未使用”,因为已知它们在精度、异常处理和 IEEE-754 行为遵从性方面有问题。 将它们包含在库中只是为了后向兼容。 为获得正确的行为、可移植性和标准遵从性,最好使用标准浮点函数而不要使用这些函数。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
.- .
语法
short __cdecl _dclass(double x);
short __cdecl _ldclass(long double x);
short __cdecl _fdclass(float x);
参数
x
浮点函数参数。
备注
这些浮点基元为浮点类型实现 CRT 宏 fpclassify
的 C 版本。 自变量 x
的分类将作为 math.h 中定义的以下常数之一返回:
值 | 说明 |
---|---|
FP_NAN |
静态、信令或不确定的 NaN |
FP_INFINITE |
正或负无穷大 |
FP_NORMAL |
标准化非零正值或负值 |
FP_SUBNORMAL |
正或负次正规(非规范化)值 |
FP_ZERO |
零正值或负值 |
有关更多详细信息,可以使用特定于 Microsoft 的 _fpclass
、_fpclassf
函数。 使用 fpclassify
宏或函数实现可移植性。
.- .
语法
int __cdecl _dsign(double x);
int __cdecl _ldsign(long double x);
int __cdecl _fdsign(float x);
参数
x
浮点函数参数。
备注
这些浮点基元在 CRT 中实施 signbit
宏或函数。 如果在自变量 x
的有效位(尾数)中设置了符号位,则它们会返回非零值。 否则,如果未设置符号位,则返回 0。
_dpcomp、_ldpcomp、_fdpcomp
语法
int __cdecl _dpcomp(double x, double y);
int __cdecl _ldpcomp(long double x, long double y);
int __cdecl _fdpcomp(float x, float y);
参数
%>
浮点函数参数。
备注
这些浮点基元采用两个自变量 x
和 y
,并返回一个值来显示其顺序关系,这种关系以 math.h 中定义的以下常数的按位“或”表示:
值 | 说明 |
---|---|
_FP_LT |
可将 x 视为小于 y |
_FP_EQ |
可将 x 视为等于 y |
_FP_GT |
可将 x 视为大于 y |
这些基元在 CRT 中实施 isgreater
、isgreaterequal
、isless
、islessequal
、islessgreater
及 isunordered
宏和函数。
_dtest、_ldtest、_fdtest
语法
short __cdecl _dtest(double* px);
short __cdecl _ldtest(long double* px);
short __cdecl _fdtest(float* px);
参数
px
指向浮点参数的指针。
备注
这些浮点基元为浮点类型实施 CRT 函数 fpclassify
的 C++ 版本。 将计算自变量 x
,并将分类作为 math.h 中定义的以下常数之一返回:
值 | 说明 |
---|---|
FP_NAN |
静态、信令或不确定的 NaN |
FP_INFINITE |
正或负无穷大 |
FP_NORMAL |
标准化非零正值或负值 |
FP_SUBNORMAL |
正或负次正规(非规范化)值 |
FP_ZERO |
零正值或负值 |
有关更多详细信息,可以使用特定于 Microsoft 的 _fpclass
、_fpclassf
函数。 使用 fpclassify
函数实现可移植性。
_d_int、_ld_int、_fd_int
语法
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);
参数
px
指向浮点参数的指针。
exp
整数类型的指数。
注解
这些浮点基元采用指向浮点值 px
和指数值 exp
的指针,并删除低于给定指数的浮点值的小数部分(如果可能)。 如果 px
中的输入值是 NAN 或无穷大,则返回的值是对该输入值运行 fpclassify
后的结果,否则是对 px
中的输出值运行该函数后的结果。
_dscale、_ldscale、_fdscale
语法
short __cdecl _dscale(double* px, long exp);
short __cdecl _ldscale(long double* px, long exp);
short __cdecl _fdscale(float* px, long exp);
参数
px
指向浮点参数的指针。
exp
整数类型的指数。
备注
这些浮点基元采用指向浮点值 px
和指数值 exp
的指针,并将 px
中的值放大 2exp
(如果可能)。 如果 px
中的输入值是 NAN 或无穷大,则返回的值是对该输入值运行 fpclassify
后的结果,否则是对 px
中的输出值运行该函数后的结果。 若要实现可移植性,首选 ldexp
、ldexpf
、ldexpl
函数。
_dunscale、_ldunscale、_fdunscale
语法
short __cdecl _dunscale(short* pexp, double* px);
short __cdecl _ldunscale(short* pexp, long double* px);
short __cdecl _fdunscale(short* pexp, float* px);
参数
pexp
指向整数类型的指数的指针。
px
指向浮点参数的指针。
备注
如果可能,这些浮点基元会将 px
指向的浮点值分解为有效数(尾数)和指数。 有效数将被缩放,使得绝对值大于或等于 0.5 且小于 1.0。 指数是 n
值,其中原始浮点值等于缩放后的有效数乘以 2n。 整数指数 n
存储在 pexp
指向的位置。 如果 px
中的输入值是 NAN 或无穷大,则返回的值是对该输入值运行 fpclassify
后的结果,否则是对输出值运行该函数后的结果。 若要实现可移植性,首选 frexp
、frexpf
、frexpl
函数。
_dexp、_ldexp、_fdexp
语法
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);
参数
y
浮点函数参数。
px
指向浮点参数的指针。
exp
整数类型的指数。
备注
这些浮点基元在 px
指向的位置构造一个等于 y
* 2exp 的浮点值。 如果 y
中的输入值是 NAN 或无穷大,则返回的值是对该输入值运行 fpclassify
后的结果,否则是对 px
中的输出值运行该函数后的结果。 若要实现可移植性,首选 ldexp
、ldexpf
、ldexpl
函数。
_dnorm、_fdnorm
语法
short __cdecl _dnorm(unsigned short* ps);
short __cdecl _fdnorm(unsigned short* ps);
参数
ps
指向表示为 unsigned short
数组的浮点值的按位表示形式的指针。
备注
这些浮点基元对下溢浮点值的小数部分进行规范化,并调整特征或偏移指数以确保匹配。 该值通过 math.h 中声明的 _double_val
、_ldouble_val
或 _float_val
类型双关并集作为浮点类型的按位表示形式(转换为 unsigned short
数组)传递。 如果输入浮点值是 NAN 或无穷大,则返回值对该值运行 fpclassify
后的结果,否则是对输出值运行该函数后的结果。
_dpoly、_ldpoly、_fdpoly
语法
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);
参数
x
浮点函数参数。
table
指向多项式常量系数表的指针。
n
要计算的多项式的阶。
备注
这些浮点基元以 n
阶多项式返回 x
的计算结果,该多项式的系数由 table
中的相应常数值表示。 例如,如果 table[0]
= 3.0、table[1]
= 4.0、table[2]
= 5.0 且 n
= 2,则它表示多项式 5.0x2 + 4.0x + 3.0。 如果在 x
为 2.0 的情况下计算此多项式,则结果为 31.0。 这些函数不会在内部使用。
_dlog、_dlog、_dlog
语法
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);
参数
x
浮点函数参数。
base_flag
控制要使用的底数的标志,0 表示底数 e,非零值表示底数 10。
备注
当 base_flag
为 0 时,这些浮点基元将返回 x
的自然对数(ln(x) 或 loge(x))。 当 base_flag
不为 0 时,它们返回 x
的以 10 为底的对数,或 log10(x)。 这些函数不会在内部使用。 若要实现可移植性,首选 log
、logf
、logl
、log10
、log10f
和 log10l
函数。
_dsin、_ldsin、_fdsin
语法
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);
参数
x
浮点函数参数。
quadrant
用于生成 sin
、cos
、-sin
和 -cos
结果的象限偏移量 0、1、2 或 3。
备注
这些浮点基元返回 x
偏移量乘以 quadrant
模 4 的正弦值。 实际上,当 quadrant
模 4 分别为 0、1、2 或 3 时,它们会返回 x
的正弦、余弦、正弦和负余弦值。 这些函数不会在内部使用。 若要实现可移植性,首选 sin
、sinf
、sinl
、cos
、cosf
、cosl
函数。
要求
标头:<math.h>
有关兼容性的详细信息,请参阅 兼容性。
另请参阅
数学和浮点支持
fpclassify
%>
.- .
isinf
.- .
isnormal
.- .
.- .
.- .
.- .