std::remquo的目的和用法是什么?

6

std::remquo函数的目的是什么?在什么情况下会使用它而不是常规的std::remainder函数?



1
当您也想要商数时? - Oliver Charlesworth
1
除非它不能提供完整商数,否则它只会提供至少最后三位的商数。 :) http://en.cppreference.com/w/cpp/numeric/math/remquo - Xeo
2个回答

9
假设我正在实现正弦函数。一种典型的实现方法是设计一些多项式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的增长,误差也会增加。

8

remquo 函数最早出现在 C99 中,在 C++ 中也有它的身影。下面是 C99 相关说明:

remquo 函数旨在实现可以利用商的低位几位数进行参数缩减。需要注意的是,x 的大小可能相对于 y 而言太大,无法实现商的精确表示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接