我对浮点数的表示方式有所了解,但恐怕还不够。
一般问题是:
对于给定的精度(就我的目的而言,以 10 为基数的精确小数位数),16 位、32 位和 64 位 IEEE-754 系统可以表示什么范围的数字?
具体来说,我只对精确到 +/-0.5(个位)或 +/- 0.0005(千分位)的 16 位和 32 位数字范围感兴趣。
对于给定的IEEE-754 http://en.wikipedia.org/wiki/IEEE_754浮点数X, if
2^E <= abs(X) < 2^(E+1)
那么距离X到下一个最大的可表示浮点数(epsilon https://en.wikipedia.org/wiki/Machine_epsilon) is:
epsilon = 2^(E-52) % For a 64-bit float (double precision)
epsilon = 2^(E-23) % For a 32-bit float (single precision)
epsilon = 2^(E-10) % For a 16-bit float (half precision)
上述方程允许我们计算以下内容:
-
For 半精度 http://en.wikipedia.org/wiki/Half_precision...
如果您想要 +/-0.5(或 2^-1)的精度,则数字的最大大小为 2^10。任何大于此限制的 X 都会导致浮点数之间的距离大于 0.5。
如果您想要 +/-0.0005(大约 2^-11)的精度,则数字的最大大小为 1。任何大于此最大限制的 X 都会导致浮点数之间的距离大于 0.0005。
-
For 单精度 http://en.wikipedia.org/wiki/Single_precision...
如果您想要 +/-0.5(或 2^-1)的精度,则数字的最大大小为 2^23。任何大于此限制的 X 都会导致浮点数之间的距离大于 0.5。
如果您想要 +/-0.0005(大约 2^-11)的精度,则数字的最大大小为 2^13。任何大于此限制的 X 都会导致浮点数之间的距离大于 0.0005。
-
For 双精度 http://en.wikipedia.org/wiki/Double_precision...
如果您想要 +/-0.5(或 2^-1)的精度,则数字的最大大小为 2^52。任何大于此限制的 X 都会导致浮点数之间的距离大于 0.5。
如果您想要 +/-0.0005(大约 2^-11)的精度,则数字的最大大小为 2^42。任何大于此限制的 X 都会导致浮点数之间的距离大于 0.0005。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)