可表示值的范围为32

在C ++标准中,它提到了浮动文字:

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

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

在x86-64下:

  • float是一个单精度IEEE-754
  • double是双精度IEEE-754
  • long double是一个80位扩展精度的IEEE-754
  • 在这种情况下,这三种类型的可代表值的范围是多少? 这在哪里记录? 或者它是如何计算的?


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

    编辑:

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


    如果知道指数位数和尾数位数,那么基于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标准...

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

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

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

    链接地址: http://www.djcxy.com/p/85575.html

    上一篇: Range of representable values of 32

    下一篇: point in Java