Java: 浮動小数点数
[id:hnw:20070611]
そういえば、Javaの浮動小数点数のあたりがどうなっているのかあまり考えたことがなかったな、と思って、実験してみた。
public class Main { public static void main (String[] args) { test1(0.1D); test2(5.045); } public static void test1 (double x) { System.out.println("test1"); p(x); double y = 0; for (int i=0; i<10; ++i) y += x; p(y); p(x * 10.0D); } public static void test2 (double x) { System.out.println("test2"); p(x); p(x * 100.0D); p(x * 100.0D + 0.5D); p((x * 100.0D + 0.5D) / 100.0D); } static void p (double x) { System.out.printf("%.19f\n",x);} }
結果
$ java Main test1 0.1000000000000000000 0.9999999999999999000 1.0000000000000000000 test2 5.0450000000000000000 504.5000000000000000000 505.0000000000000000000 5.0500000000000000000
あれ?test2の結果ってこれでいいの?