命名空间
Variants
Actions

浮点扩展第 1 部分:二进制浮点算术

来自 cppreference.cn

C 浮点扩展 - 第 1 部分:二进制浮点算术,ISO/IEC TS 18661-1:2014,根据 ISO/IEC/IEEE 60559:2011(IEEE-754 的当前修订版)的建议,为 C 标准库定义了以下新组件

__STDC_IEC_60559_BFP__
类型为 long 且值为 201ymmL 的整数常量,替换 __STDC_IEC_559__
(宏常量)
__STDC_IEC_60559_COMPLEX__
类型为 long 且值为 201ymmL 的整数常量,替换 __STDC_IEC_559_COMPLEX__
(宏常量)
定义于头文件 <limits.h>
CHAR_WIDTH SCHAR_WIDTH UCHAR_WIDTHSHRT_WIDTH USHRT_WIDTHINT_WIDTH UINT_WIDTHLONG_WIDTH ULONG_WIDTHLLONG_WIDTH ULLONG_WIDTH
(FP Ext 1 TS)
相应类型的宽度,以位为单位
(宏常量)
定义于头文件 <float.h>
(FP Ext 1 TS)
所有受支持的二进制浮点类型与最多具有 CR_DECIMAL_DIG 位有效数字的字符序列之间的转换均正确舍入(这至少为 DECIMAL_DIG + 3)
(宏常量)
定义于头文件 <fenv.h>
femode_t
(FP Ext 1 TS)
实现支持的动态浮点控制模式的集合,包括动态舍入方向模式
(typedef)
FE_DFL_MODE
(FP Ext 1 TS)
指向默认 femode_t 的指针
(宏常量)
FE_SNANS_ALWAYS_SIGNAL
(FP Ext 1 TS)
如果 sNaN 参数导致抑制 qNaN 的函数(如 hypotfmax)引发 FE_INVALID 并返回 qNaN,则定义(为整数常量 1)
(宏常量)
(FP Ext 1 TS)
设置指定的浮点异常标志,而不会导致引发它们会产生的任何副作用
(函数)
(FP Ext 1 TS)
测试给定标志是否在浮点异常标志的已保存表示中
(函数)
(FP Ext 1 TS)
集体获取和设置实现的所有动态浮点控制模式
(函数)
定义于头文件 <stdint.h>
INTn_WIDTH UINTn_WIDTHINT_LEASTn_WIDTH UINT_LEASTn_WIDTHINT_FASTn_WIDTH UINT_FASTn_WIDTHINTPTR_WIDTH UINTPTR_WIDTHINTMAX_WIDTH UINTMAX_WIDTHPTRDIFF_WIDTHSIG_ATOMIC_WIDTHSIZE_WIDTHWCHAR_WIDTH WINT_WIDTH
(FP Ext 1 TS)
相应类型的宽度,以位为单位
(宏常量)
定义于头文件 <stdlib.h>
使用指定的 snprintf 格式将单个浮点数转换为字符串
(函数)
定义于头文件 <math.h>
FP_INT_UPWARDFP_INT_DOWNWARDFP_INT_TOWARDZERO FP_INT_TONEARESTFROMZEROFP_INT_TONEAREST
(FP Ext 1 TS)
ceil、floor、trunc、round 和 roundeven 函数的舍入方向,适用于 fromfp 系列函数
(宏常量)
FP_LLOGB0
(FP Ext 1 TS)
如果参数为零,llogb 返回的值
(宏常量)
FP_LLOGBNAN
(FP Ext 1 TS)
如果参数为 NaN,llogb 返回的值
(宏常量)
(FP Ext 1 TS)
分别表示 float、double、long double 的信令 NaN
(宏常量)
FP_FAST_FADD FP_FAST_FADDL FP_FAST_DADDLFP_FAST_FSUB FP_FAST_FSUBL FP_FAST_DSUBLFP_FAST_FMUL FP_FAST_FMULL FP_FAST_DMULLFP_FAST_FDIV FP_FAST_FDIVL FP_FAST_DDIVLFP_FAST_FFMA FP_FAST_FFMAL FP_FAST_DFMALFP_FAST_FSQRT FP_FAST_FSQRTL FP_FAST_DSQRTL
(FP Ext 1 TS)
如果已定义,则表示相应的函数执行速度比在更大的类型中执行等效函数,然后强制转换为目标类型更快
(宏常量)
iseqsig
(FP Ext 1 TS)

(函数宏)
iscanonical
(FP Ext 1 TS)
测试浮点值是否为规范值
(函数宏)
issignaling
(FP Ext 1 TS)
测试浮点值是否为信令 NaN
(函数宏)
issubnormal
(FP Ext 1 TS)
测试浮点值是否为次正规值
(函数宏)
iszero
(FP Ext 1 TS)
测试浮点值是否为零(正、负、无符号)
(函数宏)
使用指定的舍入方向舍入为有符号整数
(函数)
使用指定的舍入方向舍入为无符号整数
(函数)
使用指定的舍入方向舍入为有符号整数,报告不精确性
(函数)
使用指定的舍入方向舍入为无符号整数,报告不精确性
(函数)
舍入到最接近的整数,中间情况舍入到偶数
(函数)
(FP Ext 1 TS)
等效于 logb,但返回类型为 long
(函数)
返回其幅度最大参数的值
(函数)
返回其幅度最小参数的值
(函数)
返回下一个更大的可表示浮点值
(函数)
返回下一个更小的可表示浮点值
(函数)
(FP Ext 1 TS)
计算 x+y,如同以无限精度进行计算并舍入一次到目标类型
(函数)
(FP Ext 1 TS)
计算 x-y,如同以无限精度进行计算并舍入一次到目标类型
(函数)
(FP Ext 1 TS)
计算 x*y,如同以无限精度进行计算并舍入一次到目标类型
(函数)
(FP Ext 1 TS)
计算 x/y,如同以无限精度进行计算并舍入一次到目标类型
(函数)
(FP Ext 1 TS)
计算结果与 fma 相同,如同以无限精度进行计算并舍入一次到目标类型
(函数)
(FP Ext 1 TS)
计算结果与 sqrt 相同,如同以无限精度进行计算并舍入一次到目标类型
(函数)
使用 ISO 60559 总序关系对两个浮点值进行排序
(函数)
使用 ISO 60559 总序关系对两个浮点值的幅度进行排序
(函数)
获取给定浮点值的 ISO 60559 规范二进制编码
(函数)
从给定的 NaN 值中提取有效载荷
(函数)
创建具有指定有效载荷的静默 NaN
(函数)
创建具有指定有效载荷的信令 NaN
(函数)
定义于头文件 <tgmath.h>
roundeven
(FP Ext 1 TS)
roundeven 的泛型重载
(函数)
llogb
(FP Ext 1 TS)
llogb 的泛型重载
(函数)
fmaxmag
(FP Ext 1 TS)
fmaxmag 的泛型重载
(函数)
fminmag
(FP Ext 1 TS)
fminmag 的泛型重载
(函数)
nextup
(FP Ext 1 TS)
nextup 的泛型重载
(函数)
nextdown
(FP Ext 1 TS)
nextdown 的泛型重载
(函数)
fromfp
(FP Ext 1 TS)
fromfp 的泛型重载
(函数)
ufromfp
(FP Ext 1 TS)
ufromfp 的泛型重载
(函数)
fromfpx
(FP Ext 1 TS)
fromfpx 的泛型重载
(函数)
ufromfpx
(FP Ext 1 TS)
ufromfpx 的泛型重载
(函数)
nextdown
(FP Ext 1 TS)
nextdown 的泛型重载
(函数)
totalorder
(FP Ext 1 TS)
totalorder 的泛型重载
(函数)
totalordermag
(FP Ext 1 TS)
totalordermag 的泛型重载
(函数)
fadd
(FP Ext 1 TS)
fadd 的泛型重载
(函数)
dadd
(FP Ext 1 TS)
dadd 的泛型重载
(函数)
fsub
(FP Ext 1 TS)
fsub 的泛型重载
(函数)
dsub
(FP Ext 1 TS)
dsub 的泛型重载
(函数)
fmul
(FP Ext 1 TS)
fmul 的泛型重载
(函数)
dmul
(FP Ext 1 TS)
dmul 的泛型重载
(函数)
fdiv
(FP Ext 1 TS)
fdiv 的泛型重载
(函数)
ddiv
(FP Ext 1 TS)
ddiv 的泛型重载
(函数)
ffma
(FP Ext 1 TS)
ffma 的泛型重载
(函数)
dfma
(FP Ext 1 TS)
dfma 的泛型重载
(函数)
fsqrt
(FP Ext 1 TS)
fsqrt 的泛型重载
(函数)
dsqrt
(FP Ext 1 TS)
dsqrt 的泛型重载
(函数)

[编辑] 注释

标准 C 宏 __STDC_IEC_559____STDC_IEC_559_COMPLEX__ 已被此技术规范废弃。

只有在包含相应的头文件之前定义了宏 __STDC_WANT_IEC_60559_BFP_EXT__ 时,才会声明此扩展添加到 C 库中的所有函数和宏。

除了添加到标准库之外,ISO/IEC TS 18661-1:2014 还对核心语言进行了一些更改,特别是将浮点控制分为静态控制(由新的 #pragma STDC FENV_ROUND 控制)和动态控制(由 fesetround 控制)。大多数 math.h 函数都遵循静态舍入模式(如果已设置),而不是动态舍入模式。