2017-01-25 19 views
-2

プログラムで2つの「倍精度浮動小数点型」変数を掛けると問題が発生しますが、結果はゼロです。どうして?例えば2つの倍精度浮動小数点数を掛けた結果はゼロです。なぜですか?

:結果を防ぐ方法

1.0E-321 * 5.321777473676208E-4 = 0.0 

がゼロでありません?。

+2

'double'には[最小値](https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#MIN_VALUE)があります。それより小さい数字を保存しようとすると、[アンダーフロー](https://en.wikipedia.org/wiki/Arithmetic_underflow)が発生します。 – khelwood

+0

はありますか? –

+0

'BigDecimal'を使用してください。 – Kayaman

答えて

5

doubleは、minimum valueを有する。それよりも小さい数字を試して保存すると、underflowが得られます。

BigDecimalクラスを使用できます。

BigDecimal a = new BigDecimal("1.0E-321"); 
BigDecimal b = new BigDecimal("5.321777473676208E-4"); 
System.out.println(a.multiply(b)); 
-2

ダブル最大とMINIMUS値を有する(どこかの周りに-1.7×10^308)とUR calulation 5.3 E325に近似結果を有しているので、それはuが最初に、その後数をmultipying試すことができ、エラーを示します例: 1 * 5.32177の指数を入力して、単純に力(-321 +( - 4))を追加すると、uの答えを得ることができます。 :)

関連する問題