【发布时间】:2014-10-31 10:04:17
【问题描述】:
我刚刚阅读了this topic(尤其是最后的 cmets)。
然后我想知道,为什么我们实际上需要这个是为了提供剩余部分。但似乎,之前“在 google 上”的人对此感兴趣的人并不多……
【问题讨论】:
-
@MarkDickinson 这是什么意思?您可以将其添加为完整的答案吗?
标签: floating-point modulo ieee-754
我刚刚阅读了this topic(尤其是最后的 cmets)。
然后我想知道,为什么我们实际上需要这个是为了提供剩余部分。但似乎,之前“在 google 上”的人对此感兴趣的人并不多……
【问题讨论】:
标签: floating-point modulo ieee-754
如果您正在寻找您想要它的原因,其中之一就是所谓的“范围缩小”
假设您需要 sind 函数来计算参数的正弦值(以度为单位)。一种天真的方法是
sind(x) = sin(x*pi/180)
然而这里的pi不是真正的无理数pi,而是最接近pi的浮点数。这会导致诸如sind(180) == 1.2246467991473532e-16 之类的问题,以及诸如this 和this 之类的问题(还有很多很多)。
但是正弦是一个周期函数,所以如果我们计算
remainder(x,90.0)
我们在区间 [-45,45] 上得到一个值。请注意,0、90、180、270 等恰好变为 0,乘以 pi/180 仍然是 0。因此,采用适当签名的 sin 或 cos,我们可以得到这些值的确切结果(并且如果你做一些基本的错误分析,你可以证明它也减少了其他值的错误)。
两个跟进点:
sin 或cos?嗯,这就是 remquo 的用途。sind(30.0) == 0.5。有办法解决这个问题,例如看看Julia library does 是什么。【讨论】: