PHP sqrt()返回NAN

PHP sqrt()返回NAN,php,nan,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>+<

我已经写了一段代码来实现二次方程:

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,$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(“您的+值为:“.ans1.”
); echo(“您的-值为:”.$ans2); }
问题是,如果例如a=2、b=4、c=8,两个答案都输出为NAN。关于如何解决这个问题,以便获得实际的数字输出,有什么想法吗

   $a * $c * 4 = 64
   $bs = 4 * 4 = 16
   sqrt(($bs - $fac))) = sqrt(-48)
不能接受负数的sqrt,因为它没有定义,因此结果为NaN

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

 $mb = $b - ($b*2) = -$b
所以安装
$mb
您只需使用
-$b


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

尝试在这些行中交换

    $ans1 = ($mb + sqrt(abs($bs - $fac))) / (2 * $a);
    $ans2 = ($mb - sqrt(abs($bs - $fac))) / (2 * $a);
如果对“实数”解决方案感兴趣,请参阅:

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);
}
二次函数($a,$b,$c){
$mb=$b-($b*2);
$bs=$b*$b;
$fac=($a*$c)*4;
$bsfac=$bs-$fac;
如果($bsfac<0){
$bsfac*=-1;
}
$ans1=($mb+sqrt($bsfac))/(2*$a);
$ans2=($mb-sqrt($bsfac))/(2*$a);
echo(“您的+值为:“.ans1.”
); echo(“您的-值为:”.$ans2); }

*不包括四舍五入

这是不完全正确的。实数系统中不存在数字,但它存在于复杂系统中(
sqrt(-48)
=
6.9i
)PHP没有“复杂系统”规则。根据。。。“返回arg的平方根或负数的特殊值NAN。”没错,这是一个复数,但我很确定OP对实数解感兴趣。那么没有办法输出-decimal吗?不,这个公式在实数空间中没有输入的解,在复数空间中只有一个,其中负数的平方根表示为i=sqrt(-1)的乘法,请参见Blakes解,为什么,@pivotnig?呵呵,几年前我用php做数学作业的时候,我的老师从来没有说过我用
sqrt(abs())
的答案是错的!有什么问题吗?
如果($bsfac<0){$bsfac*=-1;}
等同于
abs($bsfac)
,或者在这种情况下,
abs($bs-$fac)
函数应该以某种方式指示解决方案是一个复数,否则它是不正确的