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

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

Простая ошибка? (The ‘Real’ is not Real) [D7, WinXP]


Shlomo ©   (2006-05-02 15:04:00) 

Здравствуйте!
Помогите, пожалуйста, разобраться. Не могу понять, почему не получается, хотя должно получаться.

Var r: Real;
..

r := 0.02;
if r = 0.02 then ShowMessage(‘Yes’) else ShowMessage(‘No’);
..


Так вот, показывает ‘No’.
Но почему? Почему r <> 0.02?


Desdechado   (2006-05-03 11:20:00) [1]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1146211942&n=18


icWasya   (2006-05-03 10:52:00) [2]

>begin...end ©   (02.05.06 15:07) [1]
вод Вы говорили
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374

А на самом деле ещё хуже
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1217


wal   (2006-05-03 09:01:00) [3]


> [9] Гаврила ©   (02.05.06 22:29)
> а я с нулем попробовал
> получилось 8-0
0, небольшие целые, небольшие отрицательные степени двойки и их комбинации представляются в машине точно.


Джо   (2006-05-02 22:51:00) [4]

> [11] nt   (02.05.06 22:50)
> смех - реакция на непонятное :-)

Боюсь, что последняя фраза может вызвать новые приступы :)


nt   (2006-05-02 22:50:00) [5]

смех - реакция на непонятное :-)


nt   (2006-05-02 22:39:00) [6]

> DiamondShark ©   (02.05.06 22:05) [8]
ну, посмейся...


Гаврила   (2006-05-02 22:29:00) [7]

а я с нулем попробовал
получилось 8-0


DiamondShark   (2006-05-02 22:05:00) [8]


> nt   (02.05.06 18:31) [6]

Ты такой смешной...


Anatoly Podgoretsky   (2006-05-02 19:05:00) [9]

Потому что число 0,02 невозможно представить в машинном исчислении с плавающей запятой, вне зависимости от точности.


nt   (2006-05-02 18:31:00) [10]

учимся у сишников, ребятки
Var r: Real;
begin
r := 0.02;
if r = real(0.02)
then writeln('Yes') else writeln('No');
end.
yes


nt   (2006-05-02 18:27:00) [11]

учимся у сишников
Var r: Real;
begin
r := 0.02;
if r = real(0.02 )
then writeln('Yes') else writeln('No');
end.

yes


wal   (2006-05-02 15:56:00) [12]


> не даёт конкретных рецептов
А тут никаких конкретных рецептов нет. Если задача позволяет, то работать с целыми (непример, не с рублями, а с копейками), если не позволяет, то точное сравнение там вряд ли нужно, используй неточное, что-то вроде if Abs(r-0.02)<0.001 then ...

С уважением.


Palladin   (2006-05-02 15:54:00) [13]

1 использовать Currency
2 If trunc(r*100)=2


Shlomo   (2006-05-02 15:52:00) [14]

begin...end ©

Спасибо за ссылку.
Но всё-таки, автор статью не даёт конкретных рецептов. Подскажите пожалуйста, если не трудно.


begin...end   (2006-05-02 15:07:00) [15]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


Наверх

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