69. x 的平方根 带精度n的做法
带精度n的做法)
- 若要求返回小于目标值精度范围内的数,sqrt1便可以实现,但是大于控制不了,目前还没想到为什么,求解决
package com.wxdedu.binarysearch_;
/**
* 求某正整数的平方根,要求误差小于0.01
* sqrt1 最后的值小于等于原本的值 (可以控制)
* sqrt2 最后的值大于原本的值 (有问题,无法控制)
*/
public class Leetcode69 {
public static double sqrt1(int target) {
double n = 1e-2; // 精度要求
double l = 0, r = target; // 这里如果选择target / 2,处理1和2的时候会出错
while (l < r) {
double mid = (l + r + n) / 2;
if (target / mid >= mid) {
l = mid;
} else {
r = mid - n;
}
}
return l;
}
public static double sqrt2(int target) {
double n = 1e-2; // 精度要求
double l = 0, r = target; // 这里如果选择target / 2,处理1和2的时候会出错
while (l < r) {
double mid = (l + r) / 2;
if (target / mid <= mid) {
r = mid - n;
} else {
l = mid + n;
}
// System.out.println("l = " + l + ", r = " + r + ", mid = " + mid);
// try {
// //睡眠1s
// Thread.currentThread().sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
return l;
}
public static void main(String[] args) {
int x = 9;
double res = sqrt1(x);
double res1 = Math.sqrt(x);
System.out.println("sqrt1(" + x + ") = " + res + "与正确值" + res1 + "的差值为" + (res - res1));
res = sqrt2(x);
System.out.println("sqrt2(" + x + ") = " + res + "与正确值" + res1 + "的差值为" + (res - res1));
}
}