为什么我们需要IEEE 754余数?

时间:2014-10-31 10:04:18

标签: floating-point modulo ieee-754

我刚读过this topic(特别是最后的评论)。

然后我想知道,为什么我们真的需要这是给剩下的。但似乎并没有很多人在谷歌和#34;之前对此感兴趣...

1 个答案:

答案 0 :(得分:6)

如果你正在寻找你想要它的原因,那就是所谓的"范围减少"

让我们假设您希望sind函数以度为单位计算参数的正弦值。一个天真的方法是

sind(x) = sin(x*pi/180) 

pi这里不是真正的无理数pi,而是最接近pi的浮点数。这会导致像sind(180) == 1.2246467991473532e-16这样的问题,以及像thisthis这样的问题(还有很多甚至更多)。

但正弦是一个周期函数,所以如果我们计算

remainder(x,90.0)

我们在间隔[-45,45]上得到一个值。请注意,0,90,180,270等正好为0,乘以pi/180仍为0.因此,如果采用经过适当签名的sincos,我们可以得到确切的结果。得出这些值(如果你做了一些基本的错误分析,你可以证明它也减少了其他值的错误。)

两个跟进点:

  1. 您如何确定使用哪个sincos?那就是remquo的用途。
  2. 不幸的是,由于中间四舍五入的变幻无常,这仍然不能完全给出sind(30.0) == 0.5。有办法解决这个问题,例如:看看Julia library does