Nat*_*ons 71 floating-point precision numerical ieee-754
我知道浮点数是如何表示的,但是还不够,我害怕.
一般问题是:
对于给定的精度(对于我的目的,基数10中的精确小数位数),可以为16位,32位和64位IEEE-754系统表示什么范围的数字?
具体来说,我只对16位和32位数字的范围感兴趣,精确到+/- 0.5(那些位置)或+/- 0.0005(千分位数).
gno*_*ice 94
我从功能EPS的MATLAB文档中得出这个答案,但它应该普遍适用于IEEE-754浮点数.
对于给定的浮点数X,if
2^E <= abs(X) < 2^(E+1)
Run Code Online (Sandbox Code Playgroud)
那么从X到下一个最大可表示浮点数(epsilon)的距离是:
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)
Run Code Online (Sandbox Code Playgroud)
上述等式允许我们计算以下内容:
对于半精度 ...
如果您想要+/- 0.5(或2 ^ -1)的精度,则该数字的最大大小为2 ^ 10.大于此值且浮点数之间的距离大于0.5.
如果您希望精度为+/- 0.0005(约2 ^ -11),则该数字的最大大小为1.任何大于此值且浮点数之间的距离大于0.0005.
对于单精度 ......
如果您希望精度为+/- 0.5(或2 ^ -1),则该数字的最大大小为2 ^ 23.大于此值且浮点数之间的距离大于0.5.
如果您想要+/- 0.0005(约2 ^ -11)的精度,则该数字的最大大小为2 ^ 13.任何大于此值的浮点数之间的距离都大于0.0005.
对于双精度 ...
如果您想要+/- 0.5(或2 ^ -1)的精度,则该数字的最大大小为2 ^ 52.大于此值且浮点数之间的距离大于0.5.
如果您想要+/- 0.0005(约2 ^ -11)的精度,则该数字的最大大小为2 ^ 42.任何大于此值的浮点数之间的距离都大于0.0005.
Ric*_*gan 21
对于浮点整数(我将根据IEEE双精度给出我的答案),1到2 ^ 53之间的每个整数都是完全可表示的.超过2 ^ 53,可精确表示的整数通过增加2的幂来间隔开.例如:
不完全可表示的整数被舍入到最接近的可表示整数,因此最坏情况舍入是可表示整数之间的间距的1/2.
ben*_*din 18
精确引用的形式Peter R与MSDN ref的链接可能是一个很好的经验法则,但当然现实更复杂.
"浮点"中的"点"是二进制点而不是小数点的事实有一种方法可以打败我们的直觉.典型的例子是0.1,它需要十进制中只有一位数的精度,但根本不能用二进制表示.
如果你有一个周末去杀人,看看每个计算机科学家应该知道的浮点运算.您可能对精度和二进制到十进制转换的部分特别感兴趣.
首先,IEEE-754-2008 和 -1985 都没有 16 位浮点数;但它是一个建议的加法,具有 5 位指数和 10 位小数。IEE-754 使用专用符号位,因此正负范围相同。此外,分数前面有一个隐含的 1,所以你会得到一个额外的位。
如果您希望精确到个位,因为您可以表示每个整数,答案很简单:指数将小数点移动到分数的右端。所以,一个 10 位的小数可以得到 ±2 11。
如果你想要小数点后一位,你放弃小数点之前的一位,所以你有±2 10。
单精度有一个 23 位小数,所以你有±2 24 个整数。
小数点后需要多少位精度完全取决于您进行的计算以及您进行的计算。