Share via


浮点基元

用于实现某些标准 C 运行时库 (CRT) 浮点函数的 Microsoft 特定基元函数。 本文出于完整性而介绍了这些函数,但不建议使用它们。 其中一些函数已注明为“未使用”,因为已知它们在精度、异常处理和 IEEE-754 行为遵从性方面有问题。 将它们包含在库中只是为了后向兼容。 为获得正确的行为、可移植性和标准遵从性,最好使用标准浮点函数而不要使用这些函数。

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

_dclass, _ldclass, _fdclass

语法

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 宏或函数实现可移植性。

_dsign, _ldsign, _fdsign

语法

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);

参数

xy
浮点函数参数。

备注

这些浮点基元采用两个自变量 xy,并返回一个值来显示其顺序关系,这种关系以 math.h 中定义的以下常数的按位“或”表示:

说明
_FP_LT 可将 x 视为小于 y
_FP_EQ 可将 x 视为等于 y
_FP_GT 可将 x 视为大于 y

这些基元在 CRT 中实施 isgreaterisgreaterequalislessislessequalislessgreaterisunordered 宏和函数。

_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 中的输出值运行该函数后的结果。 若要实现可移植性,首选 ldexpldexpfldexpl 函数。

_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 后的结果,否则是对输出值运行该函数后的结果。 若要实现可移植性,首选 frexpfrexpffrexpl 函数。

_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 中的输出值运行该函数后的结果。 若要实现可移植性,首选 ldexpldexpfldexpl 函数。

_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)。 这些函数不会在内部使用。 若要实现可移植性,首选 loglogflogllog10log10flog10l 函数。

_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
用于生成 sincos-sin-cos 结果的象限偏移量 0、1、2 或 3。

备注

这些浮点基元返回 x 偏移量乘以 quadrant 模 4 的正弦值。 实际上,当 quadrant 模 4 分别为 0、1、2 或 3 时,它们会返回 x 的正弦、余弦、正弦和负余弦值。 这些函数不会在内部使用。 若要实现可移植性,首选 sinsinfsinlcoscosfcosl 函数。

要求

标头:<math.h>

有关兼容性的详细信息,请参阅 兼容性

另请参阅

数学和浮点支持
fpclassify
_fpclass_fpclassf
isfinite_finite_finitef
isinf
isnan_isnan_isnanf
isnormal
coscosfcosl
frexpfrexpffrexpl
ldexpldexpfldexpl
loglogflogllog10log10flog10l
sinsinfsinl