![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос [D1, D2, D3, D4, D5, D6, Win95/98, WinME, NT4, Win2k, WinXP]
Озадаченный © (2002-06-11 15:54:00)Уважаемые господа эксперты и просто умные люди!
У меня возник вопрос по типу Extended. Я пишу программу, которая должна найти корень уравнения методом половинного деления в пределах от 1e-30 до 1e30. Если поставить точность меньше чем 1e10 (например 0.1), то программа "виснет", а если точность ставить 1е10, то все работаеть нормально, но точно +-7 миллиардов меня не сильно устраивает. Программа:
...
var a,b,x,n,Fa,Fx:Extended;
...
a:=1e-30;
b:=1e29;
Fa:=формула с параметром а;
repeat
x:=(a+b)/2;
Fx:=формула с параметром х;
if Fa*Fx>0 then a:=x else b:=x;
until (ABS(Fx)<1e5) or (b-a<1e10);
n:=x;
...
Если b-a меньше ставить, то программа виснет. Помогите пожалуйста разобраться.
Спасибо!
С уважением,
Озадаченный
короед (2002-06-11 20:15:00) [21]ты уверен, что
if Fa*Fx>0then a:=x else b:=x;
может
if (Fa-Fx)>0then a:=x else b:=x;
еще
until (ABS(Fx)<1e5) or ( abs(b-a)<1e10);
вот так. может заработает...