10進数の人が生きているか死んでいるかを知ることができないと仮定すると、私はを使用しますlong
。
正確な結果が得られない、使用している数値の例を教えてください。
ところで:9000兆未満の整数を使用するdouble
と、正確な結果が得られます。
ところで2:あなたnew BigDecimal
が狂ったように作成するがそれらを保持しない場合、あなたはパフォーマンスを損なうでしょうが、あなたはメモリを使い果たすことはありません。メモリが不足している場合は、BigDecimalを使用する必要はありません。問題の真の原因を見つけるために、メモリプロファイラーを使用することをお勧めします。
例
BigDecimal bd = BigDecimal.ZERO;
long l = 0;
double d = 0;
while (true) {
for (int i = 0; i < 100000000; i++) {
bd = bd.add(BigDecimal.ONE);
l++;
d++;
}
System.out.println("counting bd: " + bd + " l: " + l + " d:" + d);
}
BigDecimal、longおよびdoubleでカウントする数値を出力します。doubleの形式は異なりますが、値は同じです。
counting bd: 100000000 l: 100000000 d:1.0E8
counting bd: 200000000 l: 200000000 d:2.0E8
counting bd: 300000000 l: 300000000 d:3.0E8
... deleted ...
counting bd: 1900000000 l: 1900000000 d:1.9E9
counting bd: 2000000000 l: 2000000000 d:2.0E9
counting bd: 2100000000 l: 2100000000 d:2.1E9
counting bd: 2200000000 l: 2200000000 d:2.2E9
... deleted ...
-mx2m
ヒープを2MBに制限しても、メモリが不足することはありません。