gpt4 book ai didi

php - 如何解决整数是否有整数根?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:16 27 4
gpt4 key购买 nike

我需要求解具有整数根的任何 n 次根。我最初的想法是用牛顿法求近似根,但是,幂函数不能给我们机器 float 所能表达的最大精度吗?

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

我有两个问题:

幂函数的求解是否足够接近整数根,以至于舍入 float 永远不会返回错误的整数根?这需要它偏离 0.5,直觉上我无法想象会发生这种情况,但我没有确凿的证据。

其次,return 语句是否需要小数运算?问题是对于足够大的 $integer 和 $n,PHP 将使用 float。这是可取的,因为它不会溢出大整数;但是,它保留了 float 学的使用,而 float 学本质上是不准确的。这些不准确会影响我的算法吗?

同样,直觉上我觉得 $integer 是整数和根 $n 必须是整数的约束避免了任何 float 学问题。数学永远不会涉及小数。但是,我没有办法绝对证明直觉。

最佳答案

我不会依赖 pow() 对此足够准确,但您当然可以从 pow(...,1/degree) 开始,然后向上或向下走 $n 直到 $n**$degree 匹配或穿过 $integer。 (但是自己实现 ** degree,因为它在内部使用 pow())

pow() 是一种近似值,并不总是返回最接近准确结果的可能值

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com