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

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

Как заставить Delphi правильно считать? [D6, WinXP]


viny ©   (2005-05-26 00:59:00) 

Недавно начал изучать Delphi и столкнулся вот с какой проблемой.
Дана математическая функция и необходимо вычислить значения y , соответствующие каждому значению x в интервале (nx <= x <= kx) , с шагом dx . Контрольный расчет производится при nx = -1.5, kx = 0.5, dx = 0.2 . В программе пишу цикл While x <= kx do (предварительно присвоив x := nx ), далее следует расчетная часть программы. Все числовые переменные типа Extended . При запуске расчет заканчивается при x = 0.3 , хотя в программе явно указано, пока x меньше или равен 0 . При уменьшении шага до 0.1 - последнее значение x = 0.4 , при шаге 0.02 расчет закончился таки при x = 0.5 ! И еще трабла, при шаге 0.1 в какой то момент x становится равным 0 , вместо 0 на экране появляется 0.999999999998 (что то вроде этого). Подскажите, пожалуйста, кому не в лом, как застаить Delphi правильно считать с нормальной человеческой точки зрения? Чтобы в результате выполнения операции -0.1 + 0.1 получался 0 , а не 0.999999999998 .


Defunct   (2005-05-26 04:01:00) [1]

У вас цикл с предусловием, поэтому цикл завершается на один шаг раньше чем нужно. Используйте цикл с постусловием, и все будет нормально работать:


x := nx;
Repeat
// Вычисления
x := x + dx;
until x > kx; // Завершить при x > kx


> 0.999999999998.
быть такого не может, скорее 0.00000000~1. выводите округленный рез-тат на экран и все будет ок.
Например:

Label1.Caption := Format('X = %3.3F',[x]);


Almaz   (2005-05-26 03:48:00) [2]

Советую Вам прочитать статью: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
Там есть ответы на Ваши вопросы.

Удачи.


Наверх

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