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)
实现支持的动态浮点控制模式集合,包括动态舍入方向模式
(类型定义)
FE_DFL_MODE
(FP Ext 1 TS)
指向默认 femode_t 的指针
(宏常量)
FE_SNANS_ALWAYS_SIGNAL
(FP Ext 1 TS)
若定义为整型常量 1,则 sNaN 参数会导致抑制 qNaN 的函数(如 hypot fmax )引发 FE_INVALID 并返回 qNaN
(宏常量)
(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)
用于 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_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)
测试浮点值是否为次正规数
(函数宏)

注释

标准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 函数在设置静态舍入模式时,会优先遵循静态舍入模式而非动态舍入模式。