二进制搜索和eps比较

binary search and eps in comparisons

本文关键字:比较 eps 搜索 二进制      更新时间:2023-10-16

我在二进制搜索中有两个比较,但我无法在两个underline之间做出确切的偏好。我在以下两个样本之间振荡:

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很小,二进制搜索参数中的相应误差也有很大的危险。另一方面,即使由于舍入误差,我们对相等值的比较不正确,二进制搜索仍然会正确收敛,因为相等值可能只出现在一个点上,并且在离它很近的点上一切都是正确的。我想了解一下。

根据您的代码判断,您正试图决定函数何时具有零值。第一种方法已经足够好了,因为它符合你的意图。似乎没有必要使用第二种方法。