4

std::remquo関数の目的は何ですか?std::remainder通常の関数の代わりに使用する場合の例は何ですか?

4

2 に答える 2

8

remquoC++ になる前に C99 で最初に登場しました。C99 の理論的根拠は次のとおりです。

remquo 関数は、商のいくつかの下位ビットを利用できる引数削減を実装することを目的としています。x の大きさが y に対して非常に大きい場合があるため、商の正確な表現は実用的ではないことに注意してください。

于 2012-06-17T21:25:26.863 に答える
7

正弦関数を実装しているとします。正弦を実装する一般的な方法は、s(x) が x の正弦を近似するような多項式 s を設計することですが、その多項式は -π/4 <= x <= π/4 の場合にのみ有効です。その区間外では、多項式は sine(x) から逸脱し、不適切な近似になります。(より大きな区間で多項式を適切にするには、より多くの項を持つ多項式が必要であり、ある時点で、多項式が有用なものよりも大きくなります。) 一般に、c(x) が次の余弦を近似するように多項式 c を設計します。 x、同様の間隔で。

remquo 関数は、これらの多項式を使用してサインを実装するのに役立ちます。「r = remquo(x, pi/2, &q)」を使用し、q を使用して x が円のどの部分にあるかを判断できます (正弦は周期 2π で周期的であることに注意してください。商のビット. 上位ビットは、x が円の周りを回り、正弦値を繰り返していることを示します.) x が円のどの部分にあるかに応じて、ルーチンは s(r), -s(r), c を返します. (r)、または x のサインの場合は -c(r)。

もちろん、装飾はありますが、それが基本的な考え方です。x の値が小さく、2π の数倍以下の場合にのみ機能します。これは、x が 2 倍になるたびに、除数の別のビットが正確な結果の計算に移動するためです。ただし、double 型の精度には限界があるため、正確に π/2 を remquo に渡すことはできません。したがって、x が大きくなるにつれて、エラーが大きくなります。

于 2012-06-19T02:02:42.570 に答える