Windows 7 PC で Java を使用し (それが問題かどうかは不明)、0 を返す必要がある値 (pi/2 など) で Math.cos() を呼び出すと、代わりに小さな値が返されますが、私が誤解していない限り、小さな値はゼロから 1 ulp をはるかに超えています。
Math.cos(Math.PI/2) = 6.123233995736766E-17
Math.ulp(Math.cos(Math.PI/2)) = 1.232595164407831E-32
これは実際には 1 ulp 以内で、私は単に混乱していますか? そして、これは、このマイナーな不正確さを解決するための受け入れ可能なラッパー メソッドでしょうか?
public static double cos(double a){
double temp = Math.abs(a % Math.PI);
if(temp == Math.PI/2)
return 0;
return Math.cos(a);
}