C/C++ で三角関数の計算を行っていますが、丸め誤差の問題が発生しています。たとえば、私の Linux システムでは次のようになります。
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]) {
printf("%e\n", sin(M_PI));
return 0;
}
このプログラムは、次の出力を提供します。
1.224647e-16
正解がもちろん0のとき。
三角関数を使用する場合、どの程度の丸め誤差が予想されますか? そのエラーをどのように処理するのが最善ですか? Bruce Dawson のComparing Floating Point Numbersから、浮動小数点数を比較するための Units in Last Place 手法に精通していますが、0 と 1.22e-16 はかなりの数の ULP が離れているため、ここでは機能しないようです。