The*_*ser 6 floating-point modulo ieee-754
我刚刚阅读了这个主题(特别是最后的评论).
然后我想知道,为什么我们真的需要这是给剩下的.但似乎没有多少人"在谷歌上"之前对此感兴趣...
如果你正在寻找你想要它的原因,那就是所谓的"减少范围"
假设您想要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,我们可以得到这些值的确切结果(如果你做了一些基本的错误分析,你可以证明它还减少了其他值的误差).
两个跟进点:
sin或cos使用?嗯,这remquo就是为了什么.sind(30.0) == 0.5是,由于中间四舍五入的变幻无常,这仍然不会给出确切的结果.有办法解决这个问题,例如看看朱莉娅图书馆的作用.