2012-03-07 156 views
4

我已經寫了一段代碼進行二次方程:PHP SQRT()返回NAN

function quadratic($a,$b,$c) { 
    $mb = $b - ($b*2); 
    $bs = $b * $b; 
    $fac = ($a * $c) * 4; 

    $ans1 = ($mb + sqrt(($bs - $fac)))/(2 * $a); 
    $ans2 = ($mb - sqrt(($bs - $fac)))/(2 * $a); 

    echo ("Your <b>+</b> value is: " . $ans1 . "<br />"); 
    echo ("Your <b>-</b> value is: " . $ans2); 
} 

的問題是,如果例如α= 2,B = 4,C = 8 ,兩個答案都輸出爲NAN。任何想法如何解決這個問題,讓我得到一個實際的數字輸出?

回答

4

如果有興趣在具有 「實數」 的解決方案,請參閱:

function quadratic($a,$b,$c) { 
    $mb = $b - ($b*2); 
    $bs = $b * $b; 
    $fac = ($a * $c) * 4; 

    $bsfac = $bs-$fac; 
    if($bsfac < 0){ 
     $bsfac *= -1; 
    } 

    $ans1 = ($mb + sqrt(($bsfac)))/(2 * $a); 
    $ans2 = ($mb - sqrt(($bsfac)))/(2 * $a); 

    echo ("Your <b>+</b> value is: " . $ans1 . "<br />"); 
    echo ("Your <b>-</b> value is: " . $ans2); 
} 

*四捨五入不包括

+0

'if($ bsfac <0){$ bsfac * = -1;}'相當於'abs($ bsfac)',或者在這種情況下,'abs($ bs - $ fac)' – 2012-03-07 19:35:02

+0

函數應該以某種方式表明解決方案是複數,否則它是不正確的 – thumbmunkeys 2012-03-08 10:51:07

7
$a * $c * 4 = 64 
    $bs = 4 * 4 = 16 
    sqrt(($bs - $fac))) = sqrt(-48) 

你不能求負數的平方根,它是沒有定義的,因此結果爲NaN。

Futhermore公式可以簡化爲:

$mb = $b - ($b*2) = -$b 

所以$mb instad,你可以簡單地使用-$b

除此之外,您的公式對於二次方程是正確的。

+0

這是不完全正確的。這個數字在實數系統中不存在,但它在複雜系統中('sqrt(-48)'='6.9i') – 2012-03-07 19:18:36

+0

然後,PHP沒有「複雜系統」規則。根據http://php.net/manual/en/function.sqrt.php ...「返回值 arg的平方根或負數的特殊值NAN」。 – Blake 2012-03-07 19:23:12

+0

確實,這是一個複雜的數字,但我很確定OP對我真正的號碼解決方案 – thumbmunkeys 2012-03-07 19:24:01

0

嘗試在這些行中交換。

$ans1 = ($mb + sqrt(abs($bs - $fac)))/(2 * $a); 
    $ans2 = ($mb - sqrt(abs($bs - $fac)))/(2 * $a); 
+0

爲什麼呢,@ pivotnig?呵呵,幾年前當我用php做我的數學作業時,我的老師從來沒有用'sqrt(abs())'來說我的答案是錯的!它有什麼問題? – 2012-03-07 19:31:07