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の結果ってこれでいいの?