※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

数値誤差に頑強な幾何計算

幾何計算では,「ほとんどゼロ」を「正確にゼロ」とみなした方が都合のよい場合がよくあります.これを回避するためには
static final double EPS = 1.0E-9;
と定義してから,
public static int fcompare(double x, double y){
    if(Math.abs(x-y)<EPS) return 0;
    else if(x>y) return 1;
    else return -1;
}
といった比較関数を定義して,浮動小数点の比較にこれを使うようにすると問題を回避できます.

浮動小数点数をintにキャストして出力する

単に
double a = ...
System.out.println((int)a);
と書くと,例えば a の値が正確には 4 のときに数値誤差で 3.999... になってしまい出力が変わってしまう場合があります.これを避ける方法として
double a = ...
System.out.println((int)(a + 1.0E-9));
と書く方法があります.