ISO/IEC 9899:2011 §5.2.4.2.2 ¶10 (p48) 说:
次正规数的存在或不存在由实现定义的FLT_HAS_SUBNORM、DBL_HAS_SUBNORM和LDBL_HAS_SUBNORM值来表征:
-1 不确定
0 不存在(类型不支持次正规数)
1 存在(类型确实支持次正规数)
什么!所以在某些平台上我不能写double d = 33.3
?或者编译器会自动将其转换为333E-1
? 非归一化浮点数的存在或不存在的实际意义是什么?
ISO/IEC 9899:2011 §5.2.4.2.2 ¶10 (p48) 说:
次正规数的存在或不存在由实现定义的FLT_HAS_SUBNORM、DBL_HAS_SUBNORM和LDBL_HAS_SUBNORM值来表征:
-1 不确定
0 不存在(类型不支持次正规数)
1 存在(类型确实支持次正规数)
什么!所以在某些平台上我不能写double d = 33.3
?或者编译器会自动将其转换为333E-1
? 非归一化浮点数的存在或不存在的实际意义是什么?
-FLT_MIN
次正规数是介于and FLT_MIN
(对于 type float
)和-DBL_MIN
and DBL_MIN
(对于 type )之间的非零浮点数double
。常数FLT_MIN
通常是1.17549435E-38F
,即很小。如果您只对浮点数进行少量编程,您可能从未遇到过次正规数。
在带有 的编译平台上FLT_HAS_SUBNORM == 0
,只有数字 +0。和-0。-FLT_MIN
和之间FLT_MIN
。
次正规数通常在软件中处理(因为它们具有异常行为并且不经常发生)。根本不处理它们的一个原因是避免它们发生时可能发生的减速。这在实时环境中可能很重要。
下一代英特尔台式机处理器(或者是当前的处理器?)将处理硬件中的次等问题。
次正规数的概念与表示相同值的符号33.3
和无关。333E-1
double
可以在 Kahan 的这些回忆中的“逐渐下溢”下找到亚正规线的理由及其在 IEEE 754 中的标准化历史。
编辑:
我找不到英特尔在其下一代处理器中处理硬件次规范的资源,但我已经找到了一个用于 Nvidia 的 Fermi 平台的资源。