32位,64位和80位浮点IEEE-754的可表示值范围

Range of representable values of 32-bit, 64-bit and 80-bit float IEEE-754?

本文关键字:IEEE-754 可表示 范围 64位 80位 32位      更新时间:2023-10-16

在c++标准中,它说浮动字面值:

如果缩放后的值不在其类型的可表示值范围内,则程序是病态的。

缩放后的值是有效部分乘以10 ^指数部分。

在x86 - 64:

  • float是单精度IEEE-754
  • double是双精度IEEE-754
  • long double是80位扩展精度IEEE-754

在这种情况下,这三种类型的可表示值的范围是多少?这些记录在哪里?或者它是如何计算的?

如果您知道指数位和尾数位的个数,那么根据IEEE-754格式,可以确定最大绝对可表示值为:

2^(2^(E-1)-1)) * (1 + (2^M-1)/2^M)

最小绝对值(不包括零或异常值)为:

2^(2-2^(E-1))
  • 单精度E为8,M为23。
  • 双精度E为11,M为52。
  • 对于扩展精度,我不确定。如果你指的是x87 FPU的80位精度,那么据我所知,它不符合IEEE-754标准……

答案(如果您在IEEE浮点计算机上)是在float.hFLT_MAX, DBL_MAX, LDBL_MAX。在系统上在完全支持IEEE的情况下,大约是3.4e+38, 1.8E+308和1.2 e4932。(准确的数值可能会有所不同,也可能会有所不同不同的,取决于编译器如何处理它的输入和舍入。例如,c++将它们定义为编译器内置模板。)

编辑:

WRT你的问题(因为我和其他响应者都没有。实际上回答它):可表示值的范围是[-type_MAX...type],其中typeFLTDBLLDBL中的一种。

我一直在寻找64位以内最大的可表示数,最后我制作了自己的500位浮点计算器。这是我得到的如果所有64位都打开

18446744073709551615年

18千万亿446千万亿744万亿730亿709亿551万615