如何使用二分查找法求 8 的平方根?保留 6 位小数。
假设只精确到整数部分
如果我们只需要计算整数部分的话,那很好实现,假设要开平方的数为 value,依次二分,直到找到某一个整数的平方小于等于 value,然后这个整数加1的平方大于 value,那这个数就是开平方结果的整数部分了。
下面为 PHP 实现代码:
function calcInteger($value, $low, $high)
{
$mid = round(($low + $high) / 2);
$mid2 = $mid * $mid;
if ($mid2 > $value) {
if (($mid - 1) * ($mid - 1) <= $value) return $mid - 1;
return calcInteger($value, 0, $mid);
} else if ($mid2 < $value) {
if (($mid + 1) * ($mid + 1) >= $value) return $mid;
return calcInteger($value, $mid, $high);
} else {
return $mid;
}
}
var_dump(calcInteger(8, 0, 8)); // 2
实现思路:
- 如果二分的中点的平方大于
value,说明整数部分肯定位于中点之前。这个时候需要特别注意的是,不能直接calcInteger($value, 0, $mid - 1)这样使用$mid - 1作为下一次二分查找区间的上限,因为如果开平方结果带有小数的情况下

文章介绍了如何使用二分查找法精确计算给定数值(如8)的平方根,保留特定小数位数(如6位)。通过递归和非递归方式实现,并详细解释了区间划分和比较过程。
最低0.47元/天 解锁文章
788

被折叠的 条评论
为什么被折叠?



