我需要求解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/