浮点运算-指数位

时间:2019-03-03 19:49:10

标签: python-3.x floating-point epsilon

我对浮点运算有一个一般性的问题。

最近,我对理解程序中的计算很感兴趣,因此我开始练习。我想请您解释一个让我特别困惑的地方:

  

计算机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位?我怎样才能做到这一点? ε取决于尾数的位数是正确的假设吗,因为它们决定了浮点数的精度?

1 个答案:

答案 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 “有效位数”是浮点数小数部分的首选术语。尾数是对数的分数部分。