命名空间
变体
操作

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

来自 cppreference.com

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__ 被此技术规范取代。

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

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