我需要求解n次的任何根,它有一个整数根我最初的想法是用牛顿的方法找到近似的根,但是,幂函数不能给我们提供机器浮动所能表达的最大精度吗?

function hasIntegerRoot( $integer, $degree ) {
    if( $degree == 0 || $degree == 1 ) return true;

    $r = pow( $integer, 1/$degree );

    //get nearest integer
    $n = round($r);

    //solve n^x
    $answer = pow( $n, $degree );

    return $answer == $integer;
}

我有两个问题:
幂函数的解是否足够接近整数根,以便舍入浮点永远不会返回错误的整数根?这将要求它在0.5之前关闭,直觉上我无法想象会发生这种情况,但我没有严格的证据。
其次,return语句需要十进制数学吗?问题是对于足够大的$integer和$n,PHP将使用float这是可取的,因为它不会溢出大整数;但是,它保留了浮点数学的使用,而浮点数学本身就具有不精确性。但这些不准确会影响我的算法吗?
同样,直觉上我觉得$integer是整数,根$n必须是整数的约束避免了任何浮点数学问题。数学永远不会涉及小数然而,我无法绝对证明直觉。

最佳答案

我不指望pow()足够精确,但您可以从pow(…,1/度)开始,然后上下移动$n,直到$n**$degree匹配或交叉$integer(但是你自己实现**degree,因为它在内部使用pow())
PUE()是一个近似值,它并不总是将最接近的可能值返回到精确的结果。

关于php - 如何求解整数是否具有整数根?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34551229/

10-14 12:42
查看更多