代码之家  ›  专栏  ›  技术社区  ›  Rick Regan

IEEE 754规范中的十进制转换范围(二进制浮点运算)

  •  1
  • Rick Regan  · 技术社区  · 16 年前

    第11页底部第5.6节中的表2 IEEE 754 specification 列出必须执行十进制到二进制浮点转换的十进制值的范围。指数的范围对我来说没有意义。例如,对于双精度,表中表示可以转换的最大十进制值为(10) 17 -1)*10 . 比DBL\u MAX大很多,大约是1.8*10 308 . 很明显我漏了点什么--有人能给我解释一下这张桌子吗?谢谢。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Mark Dickinson Alexandru    16 年前

    [旁注:从技术上讲,您链接到的文档不再是标准文档IEEE 754“实际上只能用于参考2008年发布的标准的更新版本。]

    我的理解是,正如您所说,该表的左边一列描述了提供的从十进制字符串到二进制浮点转换的有效输入范围。例如,一个十进制字符串 '1.234e+879' 表示值1234*10^876(M=1234,N=876),因此在表限制范围内,需要由转换功能接受。但请注意,允许十进制字符串采用的格式不在ieee754的范围内;只有价值才与此相关。

    我不认为一些允许的输入可以超出double的可表示范围是一个问题;在这种情况下,应遵循溢出的一般规则;见本文件第7.3节。也就是说,应该通知溢出异常,并且假设它没有被捕获,如果舍入模式是四舍五入到最近值或四舍五入到正无穷大,则转换的结果(例如,对于正超出范围的值)是正无穷大,如果舍入模式是向负无穷大舍入或向零舍入,则为最大有限表示值。

    更微妙的是,从我对本文档的阅读来看,转换函数也应该接受像“1e+1000”这样的十进制字符串,因为它所表示的值可以用10*10^999,甚至1000000000000000*10^984的形式表示。参见第5.6节中“输入时,尾随的零应附加到M…”或从M…“中去掉”这句话。

    从公开的草案版本来看,ieee754的当前版本在这方面似乎有些不同( version 1.2.5