это мой список:Почему этот алгоритм деления пополам не завершен?
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
x1, x2, x3, xl, xr, xm, hasil, hasil2: Real;
begin
xl := StrToFloat(Edit1.Text);
xr := StrToFloat(Edit2.Text);
x1 := F1(xl);
x2 := F1(xr);
hasil := x1 * x2;
if hasil > 0 then
begin
ShowMessage('Try Again....!!!');
Edit1.Clear;
Edit2.Clear;
end
else
begin
i := 1;
repeat
xm := (xl + xr)/2;
x3 := F1(xm);
hasil2 := x1 * x3;
if hasil2 < 0 then
begin
xr := xm;
x2 := x3;
end
else
begin
xl := xm;
x1 := x3;
end;
ListBox1.Items.Add(FloatToStr(xm));
i := i + 1;
until
x3 = 0;
end;
end;
листинга около Bisection МЕТОДЫ .... проблемы является ..... почему цикл не остановить ...
кто может помочь me ... please
Причина в том, что 'x3' никогда не становится равным нулю. Возможно, вы могли бы попробовать вместо IsSero (x3) 'или' Abs (x3)
... или вы можете остановиться после шагов «N» (например, 1 000 000), если только вы не достигнете некоторого эпсилона. –
Редкий любой момент, выполняющий более 50 итераций пополам –