1
我有2比较二进制搜索内,但我不能在两个底下之间做出确切的偏好。我下面的两个样本之间振荡:二进制搜索和eps比较
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,另一个找到'eps'?问题是什么? – 2012-01-04 20:25:29
另外,是否真的需要精确到.0000000000000000000000000000788860905 max-min?对于'double',你只需要52个循环? – 2012-01-04 20:27:58
http://petr-mitrichev.blogspot.com/2011/06/binary-search-and-eps-in-comparisons.html有趣的是,这个博客属于谁发布的问题 – Rohan 2012-01-04 22:20:48