我写了一段代码来执行二次方程式:
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。关于如何解决这个问题的任何想法,以便得到实际的数字输出?
答案 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);