Namespaces
Variants

Floating-point extensions part 1: binary floating-point arithmetic

From cppreference.net

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_WIDTH SHRT_WIDTH USHRT_WIDTH INT_WIDTH UINT_WIDTH LONG_WIDTH ULONG_WIDTH LLONG_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)
若信令NaN参数导致抑制静默NaN的函数(如 hypot fmax )引发FE_INVALID并返回静默NaN时,则定义为整型常量1
(宏常量)
(FP Ext 1 TS)
设置指定的浮点异常标志,且不会产生引发这些标志时可能导致的副作用
(函数)
(FP Ext 1 TS)
测试给定标志是否存在于已保存的浮点异常标志表示中
(函数)
(FP Ext 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 Ext 1 TS)
对应类型的位宽
(宏常量)
定义于头文件 <stdlib.h>
使用指定的 snprintf 格式将单个浮点数转换为字符串
(函数)
定义于头文件 <math.h>
FP_INT_UPWARD FP_INT_DOWNWARD FP_INT_TOWARDZERO FP_INT_TONEARESTFROMZERO FP_INT_TONEAREST
(FP Ext 1 TS)
适用于fromfp系列函数的舍入方向,用于ceil、floor、trunc、round和roundeven函数
(宏常量)
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_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 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 的通用重载 llogb
(函数)
fmaxmag
(FP Ext 1 TS)
fmaxmag 的泛型重载 fmaxmag
(函数)
fminmag
(FP Ext 1 TS)
fminmag 的泛型重载 fminmag
(函数)
nextup
(FP Ext 1 TS)
nextup 的泛型重载 nextup
(函数)
nextdown
(FP Ext 1 TS)
nextdown 的泛型重载 nextdown
(函数)
fromfp
(FP Ext 1 TS)
fromfp 的通用重载 fromfp
(函数)
ufromfp
(FP Ext 1 TS)
ufromfp 的通用重载 ufromfp
(函数)
fromfpx
(FP Ext 1 TS)
fromfpx 的通用重载 fromfpx
(函数)
ufromfpx
(FP Ext 1 TS)
ufromfpx 的通用重载 ufromfpx
(函数)
nextdown
(FP Ext 1 TS)
nextdown 的泛型重载 nextdown
(函数)
totalorder
(FP Ext 1 TS)
totalorder 的泛型重载 totalorder
(函数)
totalordermag
(FP Ext 1 TS)
totalordermag 的泛型重载 totalordermag
(函数)
fadd
(FP Ext 1 TS)
fadd 的通用重载
(函数)
dadd
(FP Ext 1 TS)
dadd 的通用重载
(函数)
fsub
(FP Ext 1 TS)
fsub的通用重载 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 函数在设置静态舍入模式时,会优先遵循静态舍入模式而非动态舍入模式。