ぬまろぐ

←戻る

BigDecimalとdoubleの性能差

2015/03/01

Javaでdouble型とかの浮動小数点で小数を扱う場合、誤差が発生します。(例えば10進数の0.1を2進数にすると無限小数になり誤差が発生します)

そのため、誤差を許さないシステムでは小数を10進(固定小数)で扱うBigDecimalを使って小数点の演算をします。

ただ、BigDecimalを使うと性能がかなり落ちます。

というわけで簡単に測定してみました。

測定条件

ノートPC(CORE i3, WIndows8, JDK1.8)で以下の計算を1千万回繰り返しました。

(1234 * 124.56) – (1234*123.45)

測定結果

double型 : 610[ms] BigDecimal型 : 1094[ms] strictfp宣言ありのdouble型 : 540[ms]

strictfp宣言は、浮動小数点演算をIEEE754に従って計算するようにする宣言です。参考までに一緒に測定しました。 これがないと、JVMによって計算結果が変わるとか、厳密でなくなるみたいです。

結論

double型に比べてBigDecimalを使うと速度が半分少しぐらいになります。

精度と処理速度をとるかはJavaではトレードオフになります。