IEEE 754 specification第11页底部5.6节中的表2列出了必须执行十进制到二进制浮点转换的十进制值范围。指数的范围对我来说没有意义。例如,对于双精度,表格表示可以转换的最大十进制值是(10 17 -1)* 10 999 。这比DBL_MAX大得多,大约是1.8 * 10 308 。显然我错过了一些东西 - 有人可以向我解释这张桌子吗?感谢。
答案 0 :(得分: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在这方面似乎有点不同,从公开的草案版本(version 1.2.5)来判断:它只需要每个实现都指定边界[-η,η]十进制字符串的指数,η大到足以容纳对应于最大支持二进制格式的有限二进制值的十进制字符串;因此,如果binary64格式是支持的最大格式,那么它看起来好像η= 400就足够了,例如。