ベンチマーク

double の 0.1 と BigDecimal? の 0.1 を 10000 回加算するのを 10000 回実行してみた

package com.snail.javaexam;

import java.math.BigDecimal;

public class App {
    public static void main( String[] args ) {

        long start = System.currentTimeMillis();
        for (int cnt = 0; cnt < 10000; cnt++) {
            fpCalc();
        }
        long end = System.currentTimeMillis();

        System.out.println("FLOATING POINT ADD");
        System.out.println("  ANS =" + fpCalc());
        System.out.println("  TIME=" + (end - start));

        start = System.currentTimeMillis();
        for (int cnt = 0; cnt < 10000; cnt++) {
            decimalCalc();
        }
        end = System.currentTimeMillis();

        System.out.println("DECIMAL ADD");
        System.out.println("  ANS =" + decimalCalc());
        System.out.println("  TIME=" + (end - start));
    }

    private static double fpCalc(){
        double ans = 0.0;
        for(int cnt = 0; cnt < 10000; cnt++) {
            ans += 0.1;
        }
        return ans;
    }

    private static BigDecimal decimalCalc() {
        BigDecimal ans = new BigDecimal("0");
        for(int cnt = 0; cnt < 10000; cnt++) {
            ans = ans.add(new BigDecimal("0.1"));
        }
        return ans;
    }
}

実行結果

FLOATING POINT ADD
  ANS =1000.0000000001588
  TIME=162
DECIMAL ADD
  ANS =1000.0
  TIME=13169

BigDecimal?を使うべきか使わざるべきか


Java#JavaSE


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2011-02-25 (金) 01:04:23 (5053d)
Short-URL: http://at-sushi.com/pukiwiki/index.php?cmd=s&k=1edc59353e
ISBN10
ISBN13
9784061426061