数値誤差に頑強な幾何計算
幾何計算では,「ほとんどゼロ」を「正確にゼロ」とみなした方が都合のよい場合がよくあります.これを回避するためには
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));
と書く方法があります.