Может попробовать так:
Прошли с шагом 0.1 от 0.0 до 1.0.
Допустим, самое маленькое значение получилось в 0.5.
Идём с шагом 0.01 от 0.4 до 0.6
Допустим, самое маленькое значение в 0.47
Идём с шагом 0.001 от 0.46 до 0.48
…
Повторять до получения нуля.
Не?
Что-то типа:
[code]
zero_finder(0.0, 0.1, 10);
/*x — левая граница интервала, t — шаг, n — кол-во шагов (при первом вызове нужно будет сделать 10 шагов)*/
public double zero_finder(x double, t double, n int)
{
double step = x;
double min = fun(step);
double tMin;
double newX = x;
for (int i = 1; i <= n; i++)
{
tMin = fun(step);
if (tMin < min)
{
min = tMin;
newX = step;
}
if (min == 0)
return step
else
step += t;
}
return zero_finder(newX, t/10, 20);
}
[/code]
Могу где-то напутать, C++ не знаю…