我对浮点运算有一个一般性的问题。
最近,我对理解程序中的计算很感兴趣,因此我开始练习。我想请您解释一个让我特别困惑的地方:
计算机epsilon(不仅作为十进制值,还作为 二进制指数的位数)。机器ε取决于尾数的位数还是指数的位数?
这是我的演算:
def exponent():
expon = 0
for number in range(1000):
if 1.0+2.0**(-number)>1.0:
expon = number
return expon
print(exponent())
print(2**(exponent())) # Prints decimal value
输出:
52
2.220446049250313e-16
对吗?我对加粗文本的解释有疑问。我是否必须确定它是8位还是11位?我怎样才能做到这一点? ε取决于尾数的位数是正确的假设吗,因为它们决定了浮点数的精度?
答案 0 :(得分:0)
您写的文字写得不好。目前尚不清楚“作为二进制指数的位数”计算数字的含义。例如,如果二进制指数的位数为11,那么将数字计算为11意味着什么?如果有人说“以13计算7乘以11,”那将毫无意义。
所谓的机器epsilon,即1和下一个更大的可表示数字之间的差,仅取决于有效数字的可用位数(以2为底的位数)。 1
2 −52 是用于IEEE-754基本64位二进制浮点的机器epsilon。由于它具有53位有效数(52位显式编码,一个通过指数字段编码),因此当高位表示2 0 时(对于1到2之间的数字必须如此),低位的有效位数代表2 −52 。
1 “有效位数”是浮点数小数部分的首选术语。尾数是对数的分数部分。