0

我试图更好地理解浮点运算。我知道机器 epsilon (e) 被定义为 1 和下一个最大数之间的差值(即 1 之后可以用浮点数准确表示的下一个最大数是 1+e)。

但是,当我将 (1+e) * (1+e) 相乘时,我会得到什么浮点数?理论上它应该是 1 + 2*e+ e^2,但是(假设 e<1)e^2 < e 所以 e^2 不会完全准确。这个答案在浮点数中是什么?

4

1 回答 1

1

正如评论中所指出的, eps^2 在任何有问题的浮点系统中都是完全可表示的。但是当添加到任何 >= 1 时,它只会被截断。没有足够的精度来包含它,并且“1.0”术语固定了指数。所以 -

(1.0 + eps)^2 -> 1.0 + 2*eps

您需要在硬件上验证这一点。我已经了解到浮点硬件并不总是像人们期望的那样运行,并且我已经看到高级数值软件执行初始化代码不仅可以逼近可用的 eps(并不总是浮点系统定义的),还可以携带验证算法依赖于提供正确结果的 eps 行为。

专业人士从不认为任何事情都是理所当然的。有时 fp 硬件实现不正确。有时 fp 系统具有奇怪的边界条件行为。信任但验证将是我的建议。

于 2015-12-06T04:47:13.573 回答