我在二进制搜索中进行了两次比较,但我无法在两个下层之间做出确切的偏好。我在下面的两个样本之间振荡:
for (int step = 0; step < 100; ++step) {
double middle = (left + right) / 2;
if (f(middle) > 0) right = middle; else left = middle;
}
和
for (int step = 0; step < 100; ++step) {
double middle = (left + right) / 2;
if (f(middle) > eps) right = middle; else left = middle;
}
f是单调递增函数,因为即使使用小eps,二进制搜索参数中的相应错误也会有更大的危险。另一方面,即使由于舍入误差我们的比较对于相等的值是不正确的,二进制搜索仍然会正确收敛,因为相等的值可能只出现在一个点上,并且一切都在非常接近它的点上是正确的。我想对此有所了解。
答案 0 :(得分:1)
从您的代码判断,您正在尝试确定函数何时具有零值。第一种方法已经足够好了,因为它符合你的意图。似乎没有必要使用第二种方法。