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

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

Почему 0.20 <= 0.20 ложь??? [D7, WinXP]


Zheksik ©   (2007-12-07 18:55:00) 

Имеется цикл:


while 0.15 <= 0.20 do
  begin
  ...
  ...+0.01
  end;


Почему 0.20 не входит в этот цикл???


Amoeba   (2007-12-09 23:00:00) [1]


> homm ©   (09.12.07 20:21) [15]
>
> > [14] Amoeba ©   (09.12.07 20:18)
> > Я читал эту статью еще в 2001 году.
>
> Дак еще нужно было кроме статьи и второй пост прочитать
> ;)
>

Читал. Но поскольку после него обсуждение зачем-то продолжилось, хотя ветку уже нужно было закрывать, посчитал не лишним еще раз напомнить об этой публикации.


homm   (2007-12-09 20:21:00) [2]

> [14] Amoeba ©   (09.12.07 20:18)
> Я читал эту статью еще в 2001 году.

Дак еще нужно было кроме статьи и второй пост прочитать ;)


Amoeba   (2007-12-09 20:18:00) [3]


> homm ©   (09.12.07 20:09) [13]
>
> > [12] Amoeba ©   (09.12.07 19:33)
> > Автору вопроса читать эту статью до полного просветления:
>
>
> Это ты во втором посте прочитал, ага?

Я читал эту статью еще в 2001 году.


homm   (2007-12-09 20:09:00) [4]

> [12] Amoeba ©   (09.12.07 19:33)
> Автору вопроса читать эту статью до полного просветления:

Это ты во втором посте прочитал, ага?


Amoeba   (2007-12-09 19:33:00) [5]

Автору вопроса читать эту статью до полного просветления:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


homm   (2007-12-07 21:28:00) [6]

> [5] Zheksik ©   (07.12.07 19:14)
> DeBUGger13   (07.12.07 19:10) [4]
> игнор

Заклинание не подействовало :)


> while 0.15 <= 0.20 do
>  begin
>  ...
>  ...+0.01
>  end;

while a <= 20 do begin
  x := a / 100;
.....
  inc(a);
end;


@!!ex   (2007-12-07 20:11:00) [7]

> [7] Zheksik ©   (07.12.07 19:26)

ПОмойму первое чему учат в программировании, так это тому, что дробные числа нельзя сравнивать напрямую. Всегд сравнивают отличие на фиксированную E.


@!!ex   (2007-12-07 20:11:00) [8]

Под Е имелось ввиду Эпсилон.


Efir   (2007-12-07 19:31:00) [9]

Ну так и использовать в циклах сравнение float переменных тоже не очень правильно. Ведь уже написали, что

> 0.2000000001 <= 0.20 = false


Zheksik   (2007-12-07 19:26:00) [10]

Efir   (07.12.07 19:22) [6]
я так в принципе и сделал, но кажется, что это не очень правильно, а значит может вылезти где угодно...


Efir   (2007-12-07 19:22:00) [11]

Если это это так напрягает, то сделай так:

while 0.15 <= 0.205 do
 begin
 ...
 ...+0.01
 end;


Zheksik   (2007-12-07 19:14:00) [12]

DeBUGger13   (07.12.07 19:10) [4]
игнор


DeBUGger13   (2007-12-07 19:10:00) [13]

В http://www.delphimaster.ru/nuts/nuts.html
КАК НЕ Входит? еще как входит!!
И 0.20 и 256 и 1024 и...
Книжки надо умные читать и думать тоже иногда...


Zheksik   (2007-12-07 19:07:00) [14]

я тоже думал, что так, но я делал так: при а := 0.20 и b := 0.20;

RoundTo(a, -2);
RoundTo(b, -2);


Эффект тот же


Goric   (2007-12-07 19:06:00) [15]

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


Плохиш   (2007-12-07 19:02:00) [16]

0.20 00000001<= 0.20 = false


Наверх

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