Java 求二次方程的精确根
这是迄今为止我所掌握的代码。该项目的目标是让用户为Java 求二次方程的精确根,java,performance,Java,Performance,这是迄今为止我所掌握的代码。该项目的目标是让用户为a,b,c为ax^2+bx+c方程输入任何整数。由于某些原因,我没有得到输入到程序中的任何数字的正确根。有人能指出我的错误吗 import java.util.*; public class Quad_Form { public static void main(String[] args){ Scanner sc = new Scanner(System.in); double a = 0; double b
a
,b
,c
为ax^2+bx+c
方程输入任何整数。由于某些原因,我没有得到输入到程序中的任何数字的正确根。有人能指出我的错误吗
import java.util.*;
public class Quad_Form {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double a = 0;
double b = 0;
double c = 0;
double discrim = 0;
double d = 0;
System.out.println("Enter value for 'a'");
String str_a = sc.nextLine();
a = Integer.parseInt(str_a);
System.out.println("Enter value for 'b'");
String str_b = sc.nextLine();
b = Integer.parseInt(str_b);
System.out.println("Enter value for 'c'");
String str_c = sc.nextLine();
c = Integer.parseInt(str_c);
double x1 = 0, x2 = 0;
discrim = (Math.pow(b, 2.0)) - (4 * a * c);
d = Math.sqrt(discrim);
if(discrim == 0){
x1 = (-b + d) / (2* a);
String root_1 = Double.toString(x1);
System.out.println("There is one root at: " + root_1);
}
else {
if (discrim > 0)
x1 = (-b + d) / (2 * a);
x2 = (-b - d) / (2 * a);
String root_1 = Double.toString(x1);
String root_2 = Double.toString(x2);
System.out.println("There are two real roots at:" + root_1 + "and" + root_2);
}
if (discrim < 0){
x1 = (-b + d) / (2 * a);
x2 = (-b - d) / (2 * a);
String root_1 = Double.toString(x1);
String root_2 = Double.toString(x2);
System.out.println("There are two imaginary roots at:" + root_1 + "and" + root_2);
}
}
}
import java.util.*;
公共类四联表{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
双a=0;
双b=0;
双c=0;
双discrim=0;
双d=0;
System.out.println(“输入'a'的值”);
字符串str_a=sc.nextLine();
a=整数.parseInt(str_a);
System.out.println(“输入'b'的值”);
字符串str_b=sc.nextLine();
b=整数.parseInt(str_b);
System.out.println(“输入'c'的值”);
字符串str_c=sc.nextLine();
c=整数.parseInt(str_c);
双x1=0,x2=0;
discrim=(数学功率(b,2.0))-(4*a*c);
d=数学sqrt(discrim);
如果(discrim==0){
x1=(-b+d)/(2*a);
字符串根_1=Double.toString(x1);
System.out.println(“有一个根在:“+root_1”);
}
否则{
如果(discrim>0)
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
字符串根_1=Double.toString(x1);
字符串根_2=Double.toString(x2);
System.out.println(“有两个实根:“+root_1+”和“+root_2”);
}
if(discrim<0){
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
字符串根_1=Double.toString(x1);
字符串根_2=Double.toString(x2);
System.out.println(“有两个假想根:“+root_1+”和“+root_2”);
}
}
}
a
,b
,c
,d
是双精度的,您将它们解析为整数。所以这可能是一个问题
使用
另一个问题是不能求负数的平方根。这将导致NaN
。对于该用途,请遵循以下步骤,但您应该正确地处理它以获得准确的结果
Math.sqrt(Math.abs());
此外,您应该使用以下公式获得根
摘自维基百科
a
,b
,c
,d
是双精度的,您将它们解析为整数。所以这可能是一个问题
使用
另一个问题是不能求负数的平方根。这将导致NaN
。对于该用途,请遵循以下步骤,但您应该正确地处理它以获得准确的结果
Math.sqrt(Math.abs());
此外,您应该使用以下公式获得根
摘自维基百科
@Smit在其中一个问题上是正确的,但还有第二个问题
Math.sqrt(discrim)
在discrim
为负值时不起作用。你应该改学Math.sqrt(Math.abs(discrim))
。@Smit在其中一个问题上是正确的,但还有第二个问题
Math.sqrt(discrim)
在discrim
为负值时不起作用。您应该改为使用Math.sqrt(Math.abs(discrim))
。哈哈,我在更改代码时设法查看了一个小错误。但我仍然没有得到正确的答案。如果我为a输入1,为b输入5,为c输入6;我应该得到根-2和-3。相反,我得到了0.5和0。5@KGidorahh正如另一个答案所说,你们不能求负数的平方根。你必须处理好这种情况。@Kgidorah我更新了答案。我希望这能解决你的痛苦。哈哈,我在修改代码时发现了一个小错误。但我仍然没有得到正确的答案。如果我为a输入1,为b输入5,为c输入6;我应该得到根-2和-3。相反,我得到了0.5和0。5@KGidorahh正如另一个答案所说,你们不能求负数的平方根。你必须处理好这种情况。@Kgidorah我更新了答案。我希望这能解决你的痛苦。你为什么要用pow()
函数来计算正方形<代码>(Math.pow(b,2.0))-(4*a*c)
为什么不简单地将其自身相乘b*b-(4*a*c)
这不太可能对b
的负值造成问题,也可以避免pow()
导致精度降低。为什么要使用pow()
函数来计算平方<代码>(Math.pow(b,2.0))-(4*a*c)
为什么不简单地将其自身相乘b*b-(4*a*c)
这不太可能导致b
的负值出现问题,也可以避免pow()造成的精度降低。