C中的浮点类型有下限吗?就像整数类型有下限(int 至少为 16 位)一样?
7 回答
是的。 float.h包含常量,例如:
FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON这是最小幅度的非零值,可以用float、double和long double表示。
FLT_MAX并FLT_MIN表示可以表示为的极端正数和负数float。类似DBL_并且LDBL_可用。
FLT_DIG, DBL_DIG, LDBL_DIG被定义为小数位数精度。
您要求的是xxx_MIN或xxx_EPSILON值。
沿着这些思路,这里有一个问题,我在其中发布了一些代码,它显示了 64 位 IEEE-754 浮点数的内部结构。
float.hFLT_MIN包含许多描述浮动类型(包括和DBL_MIN)的各种属性的宏。
标准中给出了限制要求的描述float.h(C90 或 C99 - 5.2.4.2.2“浮动类型的特性”)。
1E-37特别是,根据标准,任何实现都必须支持至少forfloat或的下限double。但是一个实现可以自由地做得比这更好(并在FLT_MIN和中指出它的作用DBL_MIN)。
如果您需要,请参阅此问题以获取有关从何处获取标准文件副本的信息:
也许这有帮助:float.h 参考(它是 C++,我不确定它是否也适用于纯 C)
此草案 C99 标准 (PDF)在第 5.2.4.2.2 节中记录了浮点类型精度的最小值。
(通过维基百科在 C99 上找到。)
标准草案摘录 (n1401.pdf)
附件 F
(规范)
IEC 60559 浮点运算
F.1 简介
1 ...定义_ _STDC_IEC_559_ _ 的实现应符合
本附件中的规范。...
F.2 类型
1 C 浮点类型符合 IEC 60559 格式,如下所示:
-- float 类型符合 IEC 60559 单一格式。
-- 双精度类型符合 IEC 60559 双精度格式。
-- long double 类型匹配 IEC 60559 扩展格式...
维基百科有一篇关于 IEC 559(或者更确切地说是 IEEE 754-1985)的文章,您可能会觉得有趣。
一个有用的参考是What Every Computer Scientist Should Know About Floating-Point Arithmetic。
浮点数的性质——它的大小、精度、限制——实际上是由硬件定义的,而不是由编程语言定义的。x86 上的单精度浮点数在 C、C#、Java 和任何其他实用编程语言中都是相同的。(例外是在软件中实现奇数宽度的浮点数的深奥编程语言。)