1

我在二分搜索中有 2 个比较,但我无法在两个底层之间做出确切的偏好。我在以下两个样本之间摇摆不定:

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

4

1 回答 1

1

从您的代码来看,您正在尝试确定函数何时为零值。第一种方法已经足够好了,因为它符合你的意图。似乎没有必要使用第二种方法。

于 2012-04-19T16:17:49.687 回答