PHP sqrt () возвращает NAN - PullRequest
       1

PHP sqrt () возвращает NAN

4 голосов
/ 07 марта 2012

Я написал фрагмент кода для выполнения квадратного уравнения:

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 ]

7 голосов
/ 07 марта 2012
   $a * $c * 4 = 64
   $bs = 4 * 4 = 16
   sqrt(($bs - $fac))) = sqrt(-48)

Вы не можете взять sqrt отрицательного числа, оно не определено, следовательно, результат равен NaN.

Далее ваша формула может быть упрощена как:

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

Таким образом, вместо $mb вы можете просто использовать -$b.

Кроме того, ваша формула верна для квадратного уравнения.

4 голосов
/ 07 марта 2012

Если вы заинтересованы в решении с использованием «действительного числа», см .:

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 голосов
/ 07 марта 2012

Попробуйте поменять местами эти строки.

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