【问题标题】:PHP sqrt() returns NANPHP sqrt() 返回 NAN
【发布时间】:2012-03-25 08:11:31
【问题描述】:

我写了一段代码来执行二次方程:

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。关于如何解决此问题以获得实际数字输出的任何想法?

【问题讨论】:

    标签: php nan


    【解决方案1】:
       $a * $c * 4 = 64
       $bs = 4 * 4 = 16
       sqrt(($bs - $fac))) = sqrt(-48)
    

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

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

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

    所以除了$mb,你可以简单地使用-$b

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

    【讨论】:

    • 这并不完全正确。数在实数系统中不存在,但在复数系统中(sqrt(-48) = 6.9i
    • 那么,PHP 没有“复杂系统”规则。根据php.net/manual/en/function.sqrt.php...“返回值 arg 的平方根或负数的特殊值 NAN。”
    • 是的,它是一个复数,但我很确定 OP 对实数解决方案感兴趣
    • 我是。那么有没有办法输出-decimal?
    • 不,该公式对您在实数空间中的输入没有解,只有在复数空间中的一个解,其中负数的平方根用 i=sqrt(-1 ),请参阅布雷克解决方案
    【解决方案2】:

    如果对“实数”解决方案感兴趣,请参阅:

    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);
    }
    

    *不包括舍入

    【讨论】:

    • if($bsfac &lt; 0){$bsfac *= -1;} 等价于abs($bsfac),或者在本例中为abs($bs - $fac)
    • 函数应该以某种方式表明解是复数,否则不正确
    【解决方案3】:

    尝试在这些行中交换。

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

    【讨论】:

    • 为什么,@pivotnig?呵呵,几年前我用php做数学作业的时候,我的老师从来没有用sqrt(abs())说我的答案是错误的!它有什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多