浮点扩展部分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_WIDTH
SHRT_WIDTH USHRT_WIDTH
INT_WIDTH UINT_WIDTH
LONG_WIDTH ULONG_WIDTH
LLONG_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_WIDTH
INT_LEASTn_WIDTH UINT_LEASTn_WIDTH
INT_FASTn_WIDTH UINT_FASTn_WIDTH
INTPTR_WIDTH UINTPTR_WIDTH
INTMAX_WIDTH UINTMAX_WIDTH
PTRDIFF_WIDTH
SIG_ATOMIC_WIDTH
SIZE_WIDTH
WCHAR_WIDTH WINT_WIDTH
(FP扩展1 TS)
对应类型的宽度,以位数表示
(宏常量)
定义于头文件 <stdlib.h>
用指定的 snprintf 格式转换单个浮点值到字符串
(函数)
定义于头文件 <math.h>
FP_INT_UPWARD
FP_INT_DOWNWARD
FP_INT_TOWARDZERO
FP_INT_TONEARESTFROMZERO
FP_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_DADDL
FP_FAST_FSUB FP_FAST_FSUBL FP_FAST_DSUBL
FP_FAST_FMUL FP_FAST_FMULL FP_FAST_DMULL
FP_FAST_FDIV FP_FAST_FDIVL FP_FAST_DDIVL
FP_FAST_FFMA FP_FAST_FFMAL FP_FAST_DFMAL
FP_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__ 为此技术规范设为弃用。

所有此扩展添加到 C 库的函数和宏,仅若在包含对应头文件前定义宏 __STDC_WANT_IEC_60559_BFP_EXT__ 才得到声明。

在对标准库的添加以外, ISO/IEC TS 18661-1:2014 做了一些对语言核心的改动,值得注意的是将浮点控制分割为静态(由新的 #pragma STDC FENV_ROUND 控制)和动态(由 fesetround 控制)。大多数 math.h 的函数考虑静态舍入模式优先于动态舍入模式,若设置了静态舍入模式。