浮点运算错误界限

时间:2011-04-06 00:21:30

标签: floating-point theory ieee-754

给定等式ax^2 + bx + c,我们知道判别式D = b^2 - 4ac告诉我们方程式是否有两个不同的根D > 0,一个重复的根D = 0,或者不是真的根D < 0。显然,如果判别式为零,则错误可能使其为正或负,这取决于误差更大的位置。 证明如果判别式非零,则浮点计算中的错误不会使其符号翻转(即,从正到负,或从负到正)。错误可以使判别式等于零吗?

我知道这与实际编程没什么关系,但我究竟如何证明floating point calculation error of the discriminant不可能导致正判别D以某种方式变为负数,反之亦然。

3 个答案:

答案 0 :(得分:2)

  1. 这句话并不像写的那样真实。它取决于二进制浮点运算的属性,如果计算是在不同的基数中执行的话,它必然不成立(例如,它不能保存在IEEE-754十进制浮点数中)。诚然,这是一个极端的案例,而不是我期望在本科课程中讨论的事情。但是,这也是一个暗示,我为什么要向你指出。
  2. 灾难性取消不起作用。
  3. 证明几乎立即从二进制浮点运算的基本属性开始。
  4. 这就是我所说的,因为这显然是家庭作业。如果你想张贴你的证据,我会很乐意提供建议,但我不会为你做你的工作。

    最后:习惯于面对你不知道该怎么做的家庭作业,特别是在理论CS或数学课程中。如果你已经知道如何去做,你就不会学到任何东西,那会是什么意思呢?

    编辑:Eric Postpischil是正确的,即使在二进制算术中,某些边缘情况的语句也是假的。

答案 1 :(得分:2)

声称如果评估判别式产生非零结果,则它具有与数学上准确的判别式不相符的相同符号。由于这是一个家庭作业问题,我暂时不会说更多,除了提示:考虑到即使最终结果不在浮点数范围之外也可能出现下溢或溢出。

答案 2 :(得分:0)

我认为必须检查决定因素是肯定的还是否定的,这实际上是检查b^2是否大于或小于4ac

在这两种情况下,你将两个数相乘,所以错误是(类似的)?看起来就像你正在寻找的那种推理。

但是将案例推向极端,例如,如果您的数字是浮点数而“错误”实际上只是使用整数,则可以更改符号:

a = 2,b = 2,c = 2/3

行列式是:D = 2 ^ 2-4 * 2 * 2/3 = -1.333

取错误,将c舍入为0,行列式变为:D = 2 ^ 2 - 0 = 4

如果这太极端了,你可以根据需要划分所有这些系数,它仍然是相同的等式,误差较小,你应该得到相同的结果......

更多...

也许答案是蒂姆所描述的,当数字彼此非常不同时会有取消(并且相当小的数字会被忽略),这不能改变差异的变化。

因此,如果abs(b^2)abs(4ac)大得多,则行列式将是abs(b^2)的符号......反之亦然。