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

The*_*ser 6 floating-point modulo ieee-754

我刚刚阅读了这个主题(特别是最后的评论).

然后我想知道,为什么我们真的需要这是给剩下的.但似乎没有多少人"在谷歌上"之前对此感兴趣...

Sim*_*rne 6

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

假设您想要sind以度为单位计算参数正弦的函数.一个天真的方法是这样做

sind(x) = sin(x*pi/180) 
Run Code Online (Sandbox Code Playgroud)

然而,pi这不是真正的无理数pi,而是最接近的浮点数pi.这导致sind(180) == 1.2246467991473532e-16这样这样的问题(以及许多,更多).

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

remainder(x,90.0)
Run Code Online (Sandbox Code Playgroud)

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

两个跟进点:

  1. 你如何确定使用哪种sincos使用?嗯,这remquo就是为了什么.
  2. 不幸的sind(30.0) == 0.5是,由于中间四舍五入的变幻无常,这仍然不会给出确切的结果.有办法解决这个问题,例如看看朱莉娅图书馆的作用.