【发布时间】:2019-02-23 01:27:12
【问题描述】:
我有一个二次公式求解器的代码,但我的 if 语句无法让 NaN 运行。
package homework;
import java.util.Scanner;
import java.lang.Math;
// My Name 9/18/18
// The purpose of this class is to allow a user to input an a,b, and c value and perform the quadratic equation on them
public class QuadFormHW
{
public static void main(String[] args)
{
double a,b,c,answer1,answer2;
Scanner inputReader = new Scanner(System.in);
System.out.print("Please enter an \"a\" \"b\" and \"c\" value.");
a = inputReader.nextDouble();
b = inputReader.nextDouble();
c = inputReader.nextDouble();
answer1 = (-b + Math.sqrt(Math.pow(b, 2) - (4 * a * c))) / (2 * a);
answer2 = (-b - Math.sqrt(Math.pow(b, 2) - (4 * a * c))) / (2 * a);
if (answer1 == NaN)
{
System.out.print("Error cannot calculate");
}
else if (answer2 == NaN)
{
System.out.print("Error cannot calculate");
}
else
{
System.out.printf("Your answers are: %.3f , %.3f",answer1,answer2);
}
inputReader.close();
}
}
谁能帮我理解为什么NaN 不是一个可接受的值?
【问题讨论】:
-
改用 Float.NaN 吗?
-
在这种非常特殊的情况下,您可以检查所有会出现 NaN 的地方,而无需执行计算:
Math.sqrt(x)是 NaN,如果x < 0和x/y是 NaN,如果y是0. 在你计算之前做:double toCheck = Math.pow(b, 2) - (4 * a * c); if(toCheck < 0 || a == 0) { /* would be NaN */ }并且只在这些都不会导致 NaN 的情况下计算其余部分。
标签: java variables if-statement nan