如何求解一个整数是否有整数根



我需要求解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/degree)开始,然后向上或向下走$n,直到$n**$degree与$integer匹配或交叉。(但是你自己实现**度,因为它内部使用pow())

pow()是一个近似值,它并不总是返回与精确结果最接近的值

相关内容

  • 没有找到相关文章

最新更新