S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

浮動小数点で0.1を10回足してみる

double

public class DoubleTest {
    public static void main(String[] args) {
        double d = 0.1d;
        double sum =0.0d;
        for (int i = 1; sum < 1 ;i++) {
            sum = sum + d;
            System.out.println(i + "\t" + sum);
        }
    }
}

<結果>10回足しても"1"になんないんだよなー

1    0.1
2    0.2
3    0.30000000000000004
4    0.4
5    0.5
6    0.6
7    0.7
8    0.7999999999999999
9    0.8999999999999999
10    0.9999999999999999
11    1.0999999999999999

float

public class FloatTest {
    public static void main(String[] args) {
        float f = 0.1f;
        float sum =0.0f;
        for ( int i = 1 ; sum < 1 ; i++ ) {
            sum = sum + f;
            System.out.println(i + "\t" + sum);
        }
    }
}

<結果>でもやっぱ"1"じゃないのね

1    0.1
2    0.2
3    0.3
4    0.4
5    0.5
6    0.6
7    0.70000005
8    0.8000001
9    0.9000001
10    1.0000001