PHP sqrt()返回NAN

时间:2012-03-07 19:12:26

标签: php 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);
}

问题在于,如果例如a = 2,b = 4,c = 8,则两个答案都输出为NAN。关于如何解决这个问题的任何想法,以便得到实际的数字输出?

3 个答案:

答案 0 :(得分:7)

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

你不能取负数的sqrt,它没有定义,因此结果是NaN。

此外,您的公式可以简化为:

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

所以$mb的instad你可以简单地使用-$b

除此之外,你的公式对于二次方程是正确的。

答案 1 :(得分: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);
}

*不包括舍入

答案 2 :(得分:0)

尝试交换这些行。

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