gpt4 book ai didi

php - 在 PHP 中使用 bcmath 计算 N 次方根

转载 作者:可可西里 更新时间:2023-11-01 13:41:46 26 4
gpt4 key购买 nike

我们正在寻找 PHP 中的第 N 个根。我们需要用非常大的数字来执行此操作,Windows 计算器返回 2。使用以下代码我们得到 1。有人知道这是如何工作的吗?

echo bcpow(18446744073709551616, 1/64);

最佳答案

好吧,PHP 和 BC 库似乎有一些限制,在互联网上搜索后我发现了这个 interesting article/code:

所以你应该使用这个函数:

<?php

function NRoot($num, $n) {
if ($n<1) return 0; // we want positive exponents
if ($num<=0) return 0; // we want positive numbers
if ($num<2) return 1; // n-th root of 1 or 2 give 1

// g is our guess number
$g=2;

// while (g^n < num) g=g*2
while (bccomp(bcpow($g,$n),$num)==-1) {
$g=bcmul($g,"2");
}
// if (g^n==num) num is a power of 2, we're lucky, end of job
if (bccomp(bcpow($g,$n),$num)==0) {
return $g;
}

// if we're here num wasn't a power of 2 :(
$og=$g; // og means original guess and here is our upper bound
$g=bcdiv($g,"2"); // g is set to be our lower bound
$step=bcdiv(bcsub($og,$g),"2"); // step is the half of upper bound - lower bound
$g=bcadd($g,$step); // we start at lower bound + step , basically in the middle of our interval

// while step!=1

while (bccomp($step,"1")==1) {
$guess=bcpow($g,$n);
$step=bcdiv($step,"2");
$comp=bccomp($guess,$num); // compare our guess with real number
if ($comp==-1) { // if guess is lower we add the new step
$g=bcadd($g,$step);
} else if ($comp==1) { // if guess is higher we sub the new step
$g=bcsub($g,$step);
} else { // if guess is exactly the num we're done, we return the value
return $g;
}
}

// whatever happened, g is the closest guess we can make so return it
return $g;
}

echo NRoot("18446744073709551616","64");

?>

希望这对您有所帮助...

关于php - 在 PHP 中使用 bcmath 计算 N 次方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242920/

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