Java基礎知識へ戻る | サンプル集目次へ戻る

実行結果
Precisionサンプルソース
小数の精度の問題にクローズアップ。小数点は、使用上の注意をよく読んで、用法・用量を守ってお使いください。
Precision.java
/**
 * 愛のJava256本ノック for Java 5.0
 * Javaサンプルソース ver0.2C "Precision"
 * Precision.java 「小数の精度を検証する」
 *
 * 2005/09/23 制作:安永ノリカズ
 *
 * 【コンパイル&実行方法】
 *     >javac Precision.java
 *     >java Precision
 * 【キーワード】
 *     整数(integer), 単精度(single precision), 倍精度(double precision), 
 *     浮動小数点(floating point number), 10進数,(decimal), 2進数(binary), 
 *     リテラル(literal)
 * 【試してみよう】
 *     int型の「変数」同士を計算して、bouble型の結果を求める。
 *     BigDecimalクラスを利用して、誤差を生じさせず0.1を10回足し合わせる。
 */
import java.lang.String;
import java.lang.System;

public class Precision {
    public static void main(String[] A00) {

        System.out.println("リテラルの計算");
        System.out.println("整数(int)演算     :10  /  3   = " + (10 / 3));
        System.out.println("単精度(float)演算 :10F /  3F  = " + (10F / 3F));
        System.out.println("倍精度(double)演算:10D  / 3D  = " + (10D / 3D));
        System.out.println("倍精度(double)演算:10.0 / 3.0 = " + (10.0 / 3.0));

        System.out.println();

        System.out.println("0.1を10回足し合わせた結果は...");

        double L00 = 0.0;
        for (int L01 = 0; L01 < 10; L01++) {
            L00 += 0.1;
        }

        System.out.println("なんと、1.0じゃなくて " + L00);
    }
}

/* ■ クラスの外でちょっと一言 ■
Javaにおける数式の計算結果は、式に含まれる値の型によって変化します。整数
同士の計算なら結果も整数。"15 / 10 = 1.5"ではなくて、"15 / 10 = 1"ですの
で、お間違えなきよう。

じゃあ、整数同士を演算して小数の結果を得たい場合にはどうする?

まず、型を指定してリテラルを記述するという方法があります。リテラルとは
ソースの中に直接書き込まれた値のこと。数値の末尾にFまたはfがあればfloat
型、Dまたはdがあればdouble型と解釈されます。また、"15.0"のようにわざと小
数点をつけるという方法もあります。この場合、数値はdouble型として解釈され
ます。

コンピュータの世界の小数には、「精度」という概念があるのも知っておく必要
があります。これはどこまで小数点以下を表現するかということで、逆の言い方
をすれば、小数のずーっと末端部分は打ち切られているということになります。
実行結果を見ていただければ、floatとdoubleの打ち切り方の違いが分かるで
しょう。

もう一つ、コンピュータの世界の小数で留意すべき点に、「10進数との誤差」が
あります。実は10進数の小数を2進数で表現することは不可能で、0.1という数字
ですら、それに最も近い浮動小数点によって表されてます。10回足しても1.0に
ならないのはその誤差のためです。

こういうことは、知ってれば「そんなもんか」と思えますが、知らなかったら、
「Javaは小学生レベルの計算も出来んのか!!」と怒っちゃいそうですよね。
BigDecimalを使えば誤差のない計算が出来ますので、ご安心を。
 */
↑ 先頭へ戻る

安永ノリカズのゲーム制作&Javaサンプル集 / Java初心者用サンプル集『愛のJava256本ノック』