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

来自cppreference.com


C 浮点扩展 - 部分 1 :二进制浮点算术, ISO/IEC TS 18661-1:2014 ,为 C 标准库定义下列新组件,它们为 ISO/IEC/IEEE 60559:2011 ( IEEE-754 的当前版本)所推荐。

__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 扩展1 TS)
对应类型的宽度,以位数表示
(宏常量)
在标头 <float.h> 定义
(FP 扩展1 TS)
所有受支持二进制浮点类型和字符序列间的转换至多准确舍入到 CR_DECIMAL_DIG 位十进制有效数字(至少是 DECIMAL_DIG + 3 )
(宏常量)
在标头 <fenv.h> 定义
femode_t
(FP 扩展1 TS)
实现支持的动态浮点控制模式的总集,包含动态舍入方向模式
(typedef)
FE_DFL_MODE
(FP 扩展1 TS)
指向默认 femode_t 的指针
(宏常量)
FE_SNANS_ALWAYS_SIGNAL
(FP 扩展1 TS)
若 sNaN 参数导致压制 gNaN 的函数,如 hypotfmax ,引发 FE_INVALID 并返回 gNaN ,则定义此宏(为整数常量 1 )
(宏常量)
(FP 扩展1 TS)
设置给定的浮点异常标志,并且不导致任何引发它们所产生的副效应
(函数)
(FP 扩展1 TS)
测试给定的标志是否在保存的浮点异常标志表示中
(函数)
(FP 扩展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 扩展1 TS)
对应类型的宽度,以位数表示
(宏常量)
在标头 <stdlib.h> 定义
用指定的 snprintf 格式转换单个浮点值到字符串
(函数)
在标头 <math.h> 定义
FP_INT_UPWARDFP_INT_DOWNWARDFP_INT_TOWARDZERO FP_INT_TONEARESTFROMZEROFP_INT_TONEAREST
(FP 扩展1 TS)
函数 ceil 、 floor 、 trunc 、 round ,及 roundeven 的舍入方向,适用于 fromfp 系列函数
(宏常量)
FP_LLOGB0
(FP 扩展1 TS)
若参数为零则 llogb 所返回的值
(宏常量)
FP_LLOGBNAN
(FP 扩展1 TS)
若参数为 NaN 则 llogb 所返回的值
(宏常量)
(FP 扩展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 扩展1 TS)
倘若定义,则指示对应的函数执行快于较大类型的等价函数后随到目标类型的转型
(宏常量)
iseqsig
(FP 扩展1 TS)

(宏函数)
iscanonical
(FP 扩展1 TS)
测试浮点值是否规范
(宏函数)
issignaling
(FP 扩展1 TS)
测试浮点值是否引发信号的 NaN
(宏函数)
issubnormal
(FP 扩展1 TS)
测试浮点值是否非正规
(宏函数)
iszero
(FP 扩展1 TS)
测试浮点值是否为零(正、符、无符号)
(宏函数)
(FP 扩展1 TS)
用指定舍入方向舍入到有符号整数
(函数)
用指定舍入方向舍入到无符号整数
(函数)
用指定舍入方向舍入到有符号整数,报告不准确性
(函数)
用指定舍入方向舍入到无符号整数,报告不准确性
(函数)
舍入到最近值,中间点情况下舍入到偶数
(函数)
(FP 扩展1 TS)
等价于 logb ,除了返回类型是 long
(函数)
返回拥有较大绝对值的参数的值
(函数)
返回拥有较小绝对值的参数的值
(函数)
(FP 扩展1 TS)
返回下个较大的可表示浮点值
(函数)
返回下个较小的可表示浮点值
(函数)
(FP 扩展1 TS)
如同以无限精度并只舍入一次到目标类型计算 x+y
(函数)
(FP 扩展1 TS)
如同以无限精度并只舍入一次到目标类型计算 x-y
(函数)
(FP 扩展1 TS)
如同以无限精度并只舍入一次到目标类型计算 x*y
(函数)
(FP 扩展1 TS)
如同以无限精度并只舍入一次到目标类型计算 x/y
(函数)
(FP 扩展1 TS)
如同以无限精度并只舍入一次到目标类型计算 fma
(函数)
(FP 扩展1 TS)
如同以无限精度并只舍入一次到目标类型计算 sqrt
(函数)
用 ISO 60559 全序关系排序二个浮点值
(函数)
用 ISO 60559 全序关系排序二个浮点值
(函数)
获得给定浮点值的 ISO 60559 规范二进制编码
(函数)
从给定的 NaN 值提取出负载
(函数)
以指定负载创建安静的 NaN
(函数)
以指定负载创建引发信号的 NaN
(函数)
在标头 <tgmath.h> 定义
roundeven
(FP 扩展1 TS)
roundeven 的泛型重载
(函数)
llogb
(FP 扩展1 TS)
llogb 的泛型重载
(函数)
fmaxmag
(FP 扩展1 TS)
fmaxmag 的泛型重载
(函数)
fminmag
(FP 扩展1 TS)
fminmag 的泛型重载
(函数)
nextup
(FP 扩展1 TS)
nextup 的泛型重载
(函数)
nextdown
(FP 扩展1 TS)
nextdown 的泛型重载
(函数)
fromfp
(FP 扩展1 TS)
fromfp 的泛型重载
(函数)
ufromfp
(FP 扩展1 TS)
ufromfp 的泛型重载
(函数)
fromfpx
(FP 扩展1 TS)
fromfpx 的泛型重载
(函数)
ufromfpx
(FP 扩展1 TS)
ufromfpx 的泛型重载
(函数)
nextdown
(FP 扩展1 TS)
nextdown 的泛型重载
(函数)
totalorder
(FP 扩展1 TS)
totalorder 的泛型重载
(函数)
totalordermag
(FP 扩展1 TS)
totalordermag 的泛型重载
(函数)
fadd
(FP 扩展1 TS)
fadd 的泛型重载
(函数)
dadd
(FP 扩展1 TS)
dadd 的泛型重载
(函数)
fsub
(FP 扩展1 TS)
fsub 的泛型重载
(函数)
dsub
(FP 扩展1 TS)
dsub 的泛型重载
(函数)
fmul
(FP 扩展1 TS)
fmul 的泛型重载
(函数)
dmul
(FP 扩展1 TS)
dmul 的泛型重载
(函数)
fdiv
(FP 扩展1 TS)
fdiv 的泛型重载
(函数)
ddiv
(FP 扩展1 TS)
ddiv 的泛型重载
(函数)
ffma
(FP 扩展1 TS)
ffma 的泛型重载
(函数)
dfma
(FP 扩展1 TS)
dfma 的泛型重载
(函数)
fsqrt
(FP 扩展1 TS)
fsqrt 的泛型重载
(函数)
dsqrt
(FP 扩展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 的函数考虑静态舍入模式优先于动态舍入模式。