std :: remquo目的和用法?

时间:2012-06-17 21:19:35

标签: c++ c c++11 floating-point c99

std::remquo功能的目的是什么?什么时候使用它而不是常规的std::remainder函数?

2 个答案:

答案 0 :(得分:7)

remquo在使用C ++之前首次出现在C99中,这是C99基本原理所说的:

  

remquo函数用于实现参数减少,这可以利用商的一些低阶位。注意x相对于y的幅度可能很大,以至于商的精确表示是不实际的。

答案 1 :(得分:6)

假设我正在实现一个正弦函数。实现正弦的典型方法是设计一些多项式s,使得s(x)近似x的正弦,但多项式仅适用于-π/ 4 <= x <=π/ 4。在该间隔之外,多项式偏离正弦(x)并且是不正确的近似。 (在更大的区间内使多项式更好需要具有更多项的多项式,并且在某些时候,多项式变得大于有用的。)通常,我们还将设计多项式c,使得c(x)近似于余弦x,在类似的时间间隔内。

remquo函数帮助我们使用这些多项式来实现正弦。我们可以使用“r = remquo(x,pi / 2,q)”并使用q来确定圆x的哪个部分。(注意,正弦是周期性的,周期为2π,所以我们只需要知道低的几个商的位数。较高的位表示x已绕过圆并重复正弦值。)根据圆x的哪个部分,例程将返回s(r), - s(r),c (r),或-c(r)表示x的正弦。

当然有装饰,但这是基本的想法。它仅适用于小的x值,不超过2π的几倍。这是因为每次x加倍时,除数的另一位移动到精确结果的计算中。但是,我们不能将π/ 2完全传递给remquo,因为double类型的精度是有限的。因此,随着x的增长,错误会增加。