一部のモバイル GPU は、積分モジュロ演算をサポートしていません。したがって、浮動小数点精度を使用してモジュロ演算を実装する必要があります。Cg 標準ライブラリでの fmod の実装は以下の通りです。
float2 fmod(float2 a, float2 b)
{
float2 c = frac(abs(a/b))*abs(b);
return (a < 0) ? -c : c; /* if ( a < 0 ) c = 0-c */
}
通常、「a/b」は「a * rcp( b )」として計算されます。場合によっては、浮動小数点エラーが原因で fmod が予期しない値を返すことがあります (たとえば、a == b の場合)。エラーを克服するための軽量な方法はありますか? 1 つのアイデアは、0.0 < バイアス < 1.0 である fmod(a + バイアス, b) のようなバイアスを追加することです。しかし、それは堅牢ではありません。コメントや参照へのポインタは大歓迎です。
前もって感謝します。