java初心者です。下記の割り算するプログラムが
できません。ご指導下さい。実行結果はコメントどめ
しました。
/*num1=1.8x10^308,num2=1.8x10^308としnum1/num2,(-num1)÷(-num2)、num1/0を計算する。
実行結果
C:\keisanclass>java WarizanMain 1.8 1.8
NaN 演算不可能と表示されました。
C:\keisanclass>java WarizanMain -1.8 -1.8
NaN 演算不可能と表示されました。
C:\keisanclass>java WarizanMain 1.8 0
Infinity 無限大と表示されました。
*/
class WarizanMain {
public static void main(String args[]) {
double num1=0.0;
double num2=0.0;
num1=Double.parseDouble(args[0]);
num2=Double.parseDouble(args[1]);
double z = Math.pow(10,308);
System.out.println((num1*z)/(num2*z));
}
}
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になります。
ご返事遅くなり本当に申し訳ありません。
本当にありがとうございます。
説明が大変に丁寧で恐縮してしまいます。
そして大変に詳しくわかりやすいご説明ありがとうございました。まだよくわからないのでよく読んでみます。
No.3
- 回答日時:
Javaのdouble型の最大値は、1.7976931348623157E308です。
(Double.MAX_VALUEで定義されています)従って、「1.8x10^308」は、ぎりぎりのところでオーバフローしているのではないでしょうか?
No.2でも、言われているように、BigDecimalを使うのがいいのではと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java のfor文について質問です。
-
javaプログラミングの質問です。
-
doubleとintの違い
-
実数からの小数部の取得
-
javaでC++のdefine文に相当する...
-
JAVAのプログラムで、2乗計算...
-
BOOL値を逆にしたい
-
Java配列でNullPointerExceptio...
-
java キーボード入力された値の...
-
JAVA EOFの検出 (条件文で「...
-
System.err. printlnとSystem.o...
-
iterateで受け取った値を処理に...
-
EXCEL VBA で、0から?1から?
-
コマンドライン引数の例外処理...
-
Java配列の問題を教えてくださ...
-
SwingでJtableのヘッダ行が表示...
-
Eclipseのコンソールを常に表示...
-
cloneメソッドについて (java)
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実数からの小数部の取得
-
0dの意味を教えてください
-
べき乗
-
Javaで何パーセント%かを表示...
-
JAVAのプログラムで、2乗計算...
-
分を表す数値(int型)を、小数...
-
double型変数値の整数部分のみ...
-
javaの課題。。
-
javaで1.8x10の308乗÷...
-
少数50桁以上を表示するには
-
double型の足し算について
-
doubleについて
-
Javaコンパイルエラー
-
手入力された値を0.5区切りに変...
-
数値積分について
-
最大値と最小値の求め方
-
最大値を求めるプログラム
-
Javaのeval関数処理
-
javaでC++のdefine文に相当する...
-
Java math.powメソッド
おすすめ情報