我相信《每个计算机科学家都应该知道浮点运算》这篇论文中有一个小错误。
它声称
不太常见的情况是实数超出范围,即其绝对值大于
http://img219.imageshack.us/img219/7396/screenshot2011052714105.pnghttp://img219.imageshack.us/img219/7396/screenshot2011052714105.png.
这几乎是准确的,最大可表示浮点数略小于此,实数大于
时超出范围http://img707.imageshack.us/img707/9236/screenshot2011052714045.pnghttp://img707.imageshack.us/img707/9236/screenshot2011052714045.png
对吧?
我不会为图像而烦恼,所以我会为"beta"写b,为"e_max"写m。
假设b是基数,p是精度,m是最大指数。
那么我想你想要的表达方式是:
(1 - b^(-p)) * b^m
例如,对于精度为4位、最大指数为12的10进制,这给出:
.9999 * 10^12
这是正确的。
请注意,这并不完全适用于IEEE浮点,因为前面的"1"位是隐式的。当指数都是1时,我隐约记得一些奇怪的事情。