1

IEEE 754 规范第 11 页底部 5.6 节中的表 2列出了必须执行十进制到二进制浮点转换的十进制值范围。指数范围对我来说没有意义。例如,对于双精度,该表显示符合转换条件的最大十进制值为 (10 17 -1)*10 999。这比 DBL_MAX 大得多,大约为 1.8*10 308。显然我遗漏了一些东西——有人可以向我解释这张桌子吗?谢谢。

4

1 回答 1

2

[旁注:从技术上讲,您链接到的文档不再是标准;“IEEE 754”实际上应该仅用于指代 2008 年发布的标准的更新版本。]

我的理解是,正如您所说,该表的左侧列描述了提供的任何十进制字符串到二进制浮点转换的有效输入范围。因此,例如,十进制字符串'1.234e+879'表示值 1234*10^876 (M = 1234, N = 876),因此在表格限制范围内,并且需要被转换功能接受。尽管请注意,十进制字符串的确切格式超出了 IEEE 754 的范围;只有这里相关的值。

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

稍微更微妙的是,根据我对本文档的阅读,转换函数也应该接受像 '1e+1000' 这样的十进制字符串,因为它表示的值可以以 10 * 10^999 的形式表示,甚至可以表示为 10000000000000000 * 10 ^984. 请参阅第 5.6 节中以“在输入时,应将尾随零附加到或从 M 中删除 ...”开头的句子。

当前版本的 IEEE 754 在这方面似乎有点不同,从公开可用的草案版本(版本 1.2.5)来看:它只要求每个实现在小数点的指数上指定边界 [-η, η]字符串,具有足够大的 η 以容纳与支持的最大二进制格式中的有限二进制值相对应的十进制字符串;因此,如果 binary64 格式是支持的最大格式,那么在我看来 η = 400 就足够大了,例如。

于 2010-08-18T11:23:53.897 回答