C++ 二进制搜索与eps的比较

C++ 二进制搜索与eps的比较,c++,algorithm,binary-search,eps,C++,Algorithm,Binary Search,Eps,我在二进制搜索中有两个比较,但我不能在两个参考底图之间做出精确的选择。我在以下两个样本中振荡: for (int step = 0; step < 100; ++step) { double middle = (left + right) / 2; if (f(middle) > 0) right = middle; else left = middle; } for(int步长=0;步长0)右=中间;否则左=中间; } 及 for(int步长=0;步长eps)右=中间;

我在二进制搜索中有两个比较,但我不能在两个参考底图之间做出精确的选择。我在以下两个样本中振荡:

for (int step = 0; step < 100; ++step) {
  double middle = (left + right) / 2;
  if (f(middle) > 0) right = middle; else left = middle;
}
for(int步长=0;步长<100;++步长){
双中=(左+右)/2;
如果(f(中间)>0)右=中间;否则左=中间;
}

for(int步长=0;步长<100;++步长){
双中=(左+右)/2;
如果(f(中间)>eps)右=中间;否则左=中间;
}

f是一个单调递增函数,因为即使使用较小的eps,二进制搜索参数中的相应误差也会更大。另一方面,即使由于舍入误差,我们的比较对于相等的值是不正确的,二进制搜索仍然会正确收敛,因为相等的值可能只出现在一个点上,而在非常接近它的点上,一切都是正确的。我想了解一下这一点。

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

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

一种方法似乎找到0,另一种方法找到
eps
?问题是什么?另外,它是否真的需要精确到最大最小值的.0000000000000000000000000000 788860905%?对于
double
您只需要52个循环,对吗?有趣的是,这个博客属于那个发布question@Rohan当前位置从这个和他的另一个问题判断,我严重怀疑这是真正的彼得米特里切夫。一个似乎找到了0,另一个找到了
eps
?问题是什么?另外,它是否真的需要精确到最大最小值的.0000000000000000000000000000 788860905%?对于
double
您只需要52个循环,对吗?有趣的是,这个博客属于那个发布question@Rohan当前位置从这个和他的另一个问题来看,我严重怀疑这是真正的彼得米特里切夫。
for (int step = 0; step < 100; ++step) {
  double middle = (left + right) / 2;
  if (f(middle) > eps) right = middle; else left = middle;
}