2015-10-23 55 views
0

我想更好地理解浮点运算。我知道机器epsilon(e)被定义为1和下一个最大数字之间的差值(即1之后的下一个最大数字,可以在浮点中精确表示为1 + e)。然而,当我乘(1 + e)*(1 + e)时,我会得到什么浮点数?理论上它应该是1 + 2 * e + e^2,但是(假设e^2 < e,所以e^2将不是完全准确的。这个答案是以浮点形式回答的?机器epsilon乘法

+0
+0

@ user2357112那么为什么'1 + 2 * e + e^2'不能代表? – bnorm

+0

准确地表示它会比所讨论的浮点格式需要更多的精度。相反,'e^2'只需要一点精度。 – user2357112

回答

1

正如注释eps^2中所述,在任何浮点系统中都可以正确表示。但是当添加到> = 1时,它会简单地截断。没有足够的精度来包含它,而“1.0”这个词表示指数。因此 -

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

您需要在硬件上进行验证。我已经学会了难以实现的方式,即浮点硬件并不总是表现得如人们所期望的那样,而且我看到高级数字软件执行初始化代码不仅可以估计可用eps(不一定是定义的浮点系统),还可以携带为了提供正确的结果,该算法需要对eps行为进行验证。

专业人员从来没有把任何事情视为理所当然。有时fp硬件执行不正确。有时fp系统有奇怪的边界条件行为。信任但验证将是我的建议。