用php求18的立方,分享 PHP 中开立方根 Cubic Root 的几种算法 - 文章教程

本文介绍了在PHP中实现立方根的几种方法,包括二分猜测法、牛顿-拉佛孙法、哈雷法等,并提供了不同算法的具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PHP 中有自带的平方根函数,但是没有立方根函数,所以我们只有自己用算法/函数实现了,其实这些算法在网上也有,我们无需了解其运行的原理,只要会用就可以了。

二分猜测法

效率比较低,需要 50 次循环左右才能算 64bits 精度。

function croot($num){

$num=$root=floatval($num);

$gap=abs($num);

$loop=50;

for($i=0;$i

$gap/=2;

$powered=$root*$root*$root;

if($powered>$num)

$root-=$gap;

elseif($powered

$root+=$gap;

else

return $root;

}

return $root;

}

可控制精度的版本:

function croot($num){

$num=$root=floatval($num);

$gap=abs($num);

while(true){

$gap/=2;

$powered=$root*$root*$root;

if(abs($powered-$num)<0.000000000001){

return $root;

}else{

if($powered>$num){

$root-=$gap;

}elseif($powered

$root+=$gap;

}else{

return $root;

}

}

}

}

牛顿-拉佛孙法

利用牛顿-拉佛孙法 Newton–Raphson method 公式 ccef17ff0814d651e47b488d637a4136.png 循环 10 次内算出结果。效率还可以。

递归版本

$guess 为任意初始值,$x 为需求根的乘方值

function croot2($guess,$x){

$try=abs($guess*$guess*$guess-$x);

if($try<0.0000000001){

return $guess;

}else{

return croot2(($x/$guess/$guess+2*$guess)/3,$x);

}

}

循环版本

function croot3($num){

$guess=$num/3;

while(abs($guess*$guess*$guess-$num)>=0.0000000001){

$guess=($num/$guess/$guess+2*$guess)/3;

}

return $guess;

}

哈雷法

利用哈雷法 Halley’s Method 公式 0180df0a70c7314f28adb28fa4e87afe.png 循环 5 次就能得到结果,算法效率最优。

function croot4($num){

$guess=$num/3;

while(true){

$try=$guess*$guess*$guess;

if(abs($try-$num)>=0.0000000001)

$guess=$guess*(($try+2*$num)/(2*$try+$num));

else

return $guess;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值