Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос [D1, D2, D3, D4, D5, D6, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2

Озадаченный ©   (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);
вот так. может заработает...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо