1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 思路: r^2 = x //r的平方=x r^2+x = 2x //推演 (r^2+x)/2 = x //推演 (r+x/r)/2 = x/r 直接用x/r,得到的数比r大,说明r的值小了,比r小,说明r的值大了 取x/r和r的中间值,不断的使用x去除,直到x/r和r趋近相同,差值小于1e-7,就是小于10^-7 最后根据题目内容舍去小数位
代码: function mySqrt($x) { if ($x < 2) return $x; $r = $x;
while (true) { $temp = ($r + $x / $r) / 2; // x/r的值和r和的中间值 if (abs($r - $temp) < 1e-7) { // 如果x/r和r的值相差极小,可以认为x/r = r break; } $r = $temp; }
return floor($r); //舍弃小数 }
|