ホテルを選ぶとき、これだけは譲れない条件TOP3は?

double a = 2, b = 3, c = 5;
double d = Math.sqrt(b * b - 4 * a * c);
double x1 = (-b + d) / (2 * a);
double x2 = (-b - d) / (2 * a);
System.out.println(x1);
System.out.println(x2);

A 回答 (2件)

問題が発生した個所は、2行目の Math.sqrt です。


b * b - 4 * a * c の値が -31 になりますが、
Math.sqrt は実数にしか対応していないので
異常値として NaN を返すのです。

参考↓
https://eng-entrance.com/java-sqrt-cbrt
>戻り値:aの正の平方根。もし,引数がゼロより小さければ,
>結果はNaNになる。

その結果、3行目 4行目の計算の結果も NaN になって、
5行目 6行目の System.out.println は NaN と出力します。

ちなみに、これは気持ち的にはエラーなんですが、
プログラムとしてはエラーではなく、
計算の結果が異常値であることを示す正常動作です。
例外は発生しないし、NaN は正しい浮動小数点数のひとつです。
    • good
    • 1
この回答へのお礼

ありがとうございます!

お礼日時:2019/10/29 12:34

2行目の平行根(Math.sqrt)の中身が3*3 - 4*2*5=9-40=-31と負の数だからでしょう。

    • good
    • 1
この回答へのお礼

ありがとうございます!

お礼日時:2019/10/29 12:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報