2

C中的浮点类型有下限吗?就像整数类型有下限(int 至少为 16 位)一样?

4

7 回答 7

3

是的。 float.h包含常量,例如:

FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON这是最小幅度的非零值,可以用floatdoublelong double表示。

FLT_MAXFLT_MIN表示可以表示为的极端正数和负数float。类似DBL_并且LDBL_可用。

FLT_DIG, DBL_DIG, LDBL_DIG被定义为小数位数精度。

您要求的是xxx_MINxxx_EPSILON值。

沿着这些思路,这里有一个问题,我在其中发布了一些代码,它显示了 64 位 IEEE-754 浮点数的内部结构。

于 2009-11-11T09:11:09.763 回答
3

要严格和接地:

ISO/IEC 9899:TC2:(WG14/N1124m,2005 年 5 月 6 日)

5.2.4.2.2、浮动类型的特点<float.h>

于 2009-11-11T09:18:29.593 回答
2

float.hFLT_MIN包含许多描述浮动类型(包括和DBL_MIN)的各种属性的宏。

标准中给出了限制要求的描述float.h(C90 或 C99 - 5.2.4.2.2“浮动类型的特性”)。

1E-37特别是,根据标准,任何实现都必须支持至少forfloat或的下限double。但是一个实现可以自由地做得比这更好(并在FLT_MIN和中指出它的作用DBL_MIN)。

如果您需要,请参阅此问题以获取有关从何处获取标准文件副本的信息:

于 2009-11-11T09:10:33.080 回答
1

也许这有帮助:float.h 参考(它是 C++,我不确定它是否也适用于纯 C)

于 2009-11-11T09:09:05.930 回答
1

草案 C99 标准 (PDF)在第 5.2.4.2.2 节中记录了浮点类型精度的最小值。

(通过维基百科在 C99 上找到。)

于 2009-11-11T09:18:48.143 回答
0

标准草案摘录 (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)的文章,您可能会觉得有趣。

于 2009-11-11T16:51:55.593 回答
0

一个有用的参考是What Every Computer Scientist Should Know About Floating-Point Arithmetic

浮点数的性质——它的大小、精度、限制——实际上是由硬件定义的,而不是由编程语言定义的。x86 上的单精度浮点数在 C、C#、Java 和任何其他实用编程语言中都是相同的。(例外是在软件中实现奇数宽度的浮点数的深奥编程语言。)

于 2009-11-11T10:04:55.173 回答