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

时间:2013-03-02 13:20:37

标签: c++ c++11 floating-point x86-64 ieee-754

在C ++标准中,它描述了浮动文字:

  

如果缩放值不在其类型的可表示值范围内,则程序格式错误。

缩放值是重要部分乘以10 ^指数部分。

在x86-64下:

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

在这种情况下,这三种类型中每种类型的可重复值的范围是多少?这记录在哪里?或者如何计算?

3 个答案:

答案 0 :(得分:4)

如果你知道指数位和尾数位的数量,那么根据IEEE-754 format,可以确定最大绝对可表示值是:

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

最小绝对值(不包括零或denormals)是:

2^(2-2^(E-1))
  • 对于单精度,E为8,M为23。
  • 对于双精度,E为11,M为52。
  • 对于扩展精度,我不确定。如果您指的是x87 FPU的80位精度,那么据我所知,它是not's IEEE-754 compliant ......

答案 1 :(得分:2)

答案(如果你在具有IEEE浮点的机器上)是 在float.hFLT_MAXDBL_MAXLDBL_MAX。在一个系统上 完全支持IEEE,大约3.4e + 38,1.8E + 308和 1.2E4932。 (确切的值可能会有所不同,并且可以表达 不同的是,取决于编译器如何进行输入和 四舍五入。例如,g ++将它们定义为编译器 内置插件。)

编辑:

写下你的问题(因为我和其他响应者都没有 实际上回答了它:可表示值的范围是 [-type_MAX...type],在哪里 typeFLTDBLLDBL之一。

答案 2 :(得分:-3)

我正在寻找64位最大可表示的数字,并最终制作了我自己的500位浮点计算器。如果所有64位都打开,我就会想到这一点

18,446,744,073,709,551,615

18 pintillion 446千万亿744万亿73亿7千5百万551千615