2013-05-12 61 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總是會返回一個正數,忽略了複數。但是,這有點離題。

相關問題