2013-05-12 59 views
0

这个二次方程式不会返回我确定它返回的字符串中的负数。 这里的方程:这个二次方程为什么不会返回负数?

public class QuadraticEquation { 

    String final0; 
    public String calculate(int a, int b, int c) { 
     double done1 = ((-1 * b) + Math.sqrt((b * b) - (4 * a * c)))/(2 * a); 
     double done2 = ((-1 * b) - Math.sqrt((b * b) - (4 * a * c)))/(2 * a); 
     final0 = "x = " + (done1) + " or x = " + (done2); 

     return final0; 
    } 
} 

想象用,b和c的值的方程像-3,13 -4和。这个返回值将是-0.3(重复)和-4。但是这个方程只返回正数,所以在这种情况下它会返回0.3(重复),4.为什么会这样,我能做些什么来解决它?

注意:我确实认为这是Java错误而不是数学错误。如果这是一个数学错误,请在评论中告诉我,我会立即将其放入适当的论坛。谢谢。

+0

@assylias sqrt返回一倍。 – 2013-05-12 20:14:41

+0

@ZiyaoWei但你除以'(2 * a)',这是一个int。这也不会处理虚数。 a,b和c应该是双打。 – ApproachingDarknessFish 2013-05-12 20:17:23

+3

仅仅0.3是不是正确答案? (-1 * 13 + sqrt(13 * 13-4 * -3 * -4))/(2 * -3)=(-13 + 11)/(-6)= 0.333 – 2013-05-12 20:17:49

回答

2
public static void main(String[] args) { 

    String final0 = calculate(-3, 13, -4); 
    System.out.println(final0); 

} 
public static String calculate(int a, int b, int c) { 
    String final0 ; 
    int i = -1 * b; // -1 * 13 = -13 
    System.out.println(i); 

    int j = 4 * a * c; // 4 * -3 * -4 = 4 * 12 = 48 
    System.out.println(j); 

    double sqrt = Math.sqrt((b * b) - j); // sqrt ((13 * 13) - 48) = sqrt(169 - 48) = sqrt(121) = 11 
    System.out.println(sqrt); 

    double d = i + sqrt; // -13 + 11 = -2 
    System.out.println(d); 

    int k = 2 * a; // 2* -3 = -6 
    System.out.println(k); 

    double done1 = d/k; // -2/-6 = 1/3 = 0.3333333333 
    System.out.println(done1); 

    double done2 = (i - sqrt)/k; 
    final0 = "x = " + (done1) + " or x = " + (done2); 

    return final0; 
} 

如果将方法分解为更多局部变量,您会看到java中的数学运算正确。

2

我还以为

-3*x^2 + 13 *x + -4 = -3 * (x - 0.33333) * (x - 4) = 0 

所以两个正的答案是正确的。

尝试,而不是

1 * x^2 + 0 * x -1 = (x - 1) * (x + 1) = 0 

即X = -1或+1


这是我会怎么写。

public static String calculate(int a, int b, int c) { 
    double sqrt = Math.sqrt((b * b) - (4 * a * c)); 
    double done1 = (-b + sqrt)/(2 * a); 
    double done2 = (-b - sqrt)/(2 * a); 
    return "x = " + (done1) + " or x = " + (done2); 
} 
+0

嗯..错误的因式分解。 -1 *(3x-1)*(x-4)。 – 2013-05-12 20:22:10

+0

@ZiyaoWei正确。谢谢。 – 2013-05-12 20:24:50

1

该代码与您的输入正常工作。如果你改变了b等于-13例如,你会得到

X = -4.0或x = -0.3333333333333333

Math.sqrt总是会返回一个正数,忽略了复数。但是,这有点离题。

相关问题