double sqrt 的写法

写了个求double 的sqrx,求指教有没有什么问题


	public double sqrt(double x, double proximity) {
		if (x == 0) return 0;
		double l = 0;
		double r = x;
		while (l + proximity < r) {
			double mid = l + (r - l) / 2;
			if (mid == l || mid == r || mid * mid == x) return mid;
			if (mid * mid < x) {
				l = mid;
			}
			else {
				r = mid;
			}
		}
		if (r * r <= x) return r;
		return l;
	}

不知道x 是否默认是大于1?否则 double l = 1应该改为double l = 0.0

对对对,已改正

我发现对于小于1的数会有误差诶,不知道是怎么回事

我知道为什么了,r不应该设成x,因为sqrt的值会比x大

对,但还是在1以内,所以不妨就设成1?

可以 r = Math.max(1 , x)

可以精简一下

if (mid == l || mid == r || mid * mid == x) return mid;

这句不用加,本身已经是 double。

if (r * r <= x) return r;

这里可以直接 return l

有道理诶