4

std::remquo该函数的目的是什么?什么是您何时使用它而不是常规std::remainder函数的示例?

4

2 回答 2

8

remquo在 C++ 之前首次出现在 C99 中,以下是 C99 的基本原理:

remquo 函数旨在实现可以利用商的一些低位的参数缩减。请注意,x 相对于 y 的大小可能非常大,以至于商的精确表示是不切实际的。

于 2012-06-17T21:25:26.863 回答
7

假设我正在实现一个正弦函数。实现正弦的典型方法是设计一些多项式 s,使 s(x) 近似于 x 的正弦,但该多项式仅适用于 -π/4 <= x <= π/4。在该区间之外,多项式偏离 sine(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 的增长,误差也会增长。

于 2012-06-19T02:02:42.570 回答