• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaで1.8x10の308乗÷(ー1.8x10の308)乗割り算をしたいです。)

javaで1.8x10の308乗÷ー1.8x10の308乗割り算の計算方法

このQ&Aのポイント
  • java初心者が1.8x10の308乗÷ー1.8x10の308乗割り算をする方法を教えてください。
  • 実行結果はNaN(演算不可能)、Infinity(無限大)となります。
  • javaのプログラムで割り算を行う際には、double型などの適切なデータ型を使用して計算する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

理解しやすくするために、 System.out.println((num1*z)/(num2*z)); の前に System.out.println(num1*z); System.out.println(num2*z); の2行を入れましょう。これで、何を何で割ろうとしているのかがわかるようになります。 次に、 System.out.println(Double.MAX_VALUE); という1行をどこかに入れてみてください。結果、 1.7976931348623157E308 と表示されると思います。 つまり、 1.8×10^308はdoubleの最大値をオーバーしてしまうので、1.8 1.8のときはnum1とnum2にはInfinityが代入されます。∞÷∞は計算できないので、NaN(Not a Number)が表示されます。 次に、-1.8 -1.8のときは同様にnum1とnum2には-Infinityが代入されます。(-∞)÷(-∞)も計算できないのでNaNです。 最後に、1.8 0のときはnum1にInfinity、num2に0が代入されます。このとき∞÷0になりますが、javaでは分子が0でなく、分母が0のときには便宜上Infinityと計算されます。(もちろん数学的には0で割ってはいけないのですが)よってInfinityが表示されます。(もちろんnum1が-Infinityなら答えは-Infinityです) ちなみに0 0だとこれは計算できないとしてNaNになります。

rubi7
質問者

お礼

ご返事遅くなり本当に申し訳ありません。 本当にありがとうございます。 説明が大変に丁寧で恐縮してしまいます。 そして大変に詳しくわかりやすいご説明ありがとうございました。まだよくわからないのでよく読んでみます。

その他の回答 (2)

回答No.3

Javaのdouble型の最大値は、1.7976931348623157E308です。(Double.MAX_VALUEで定義されています) 従って、「1.8x10^308」は、ぎりぎりのところでオーバフローしているのではないでしょうか? No.2でも、言われているように、BigDecimalを使うのがいいのではと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

10e308 は、おそらくdouble の表現範囲を超えています BigDecimal クラスを使ってみてはどうでしょうか

関連するQ&A