首页 > 解决方案 > 浮点算术 - 指数的位

问题描述

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

最近,我对了解程序中的计算产生了浓厚的兴趣,于是开始解题。我想让你解释一下让我特别困惑的一个:

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

标签: python-3.xfloating-pointepsilon

解决方案


你写的文字写得不好。目前尚不清楚将数字“作为二进制指数的位数”来计算意味着什么。例如,如果二进制指数的位数是 11,那么将一个数计算为 11 意味着什么?如果有人说“计算 7 乘以 13 为 11”,那将毫无意义。

所谓的机器 epsilon,即 1 和下一个更大的可表示数字之间的差异,仅取决于有效数字可用的位数(基数为 2 的位)。1

2 −52是 IEEE-754 基本 64 位二进制浮点的机器 epsilon。由于它有一个 53 位的有效位(52 位显式编码,一个通过指数字段编码),当高位表示 2 0时,对于 1 和 2 之间的数字,有效位的低位表示 2 -52 .

脚注

1 “有效位”是浮点数小数部分的首选术语。尾数是对数的小数部分。


推荐阅读