![]() |
![]() |
kosyak |
![]()
Сообщение
#1
|
|||
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: ![]() ![]() ![]() |
Прошу прощение, если тема не в том разделе и может об этом было уже сказано (я не нашел)
Кто-нибудь может объяснить, почему так? Код program pr; var i: real; begin i:=0; while i<=1 do begin writeln(i); i:=i+0.1; end; writeln(i); readln; end. По всем правилам программа последним числом должна вывести 1,1... Но нет!! Она выводит 1.... Причем Delphi при аналогичном коде выводит правильно: Код procedure TForm1.Button1Click(Sender: TObject); var i: real; begin i:=0; while i<=1 do begin memo1.Lines.Add(floattostr(i)); i:=i+0.1; end; memo1.Lines.Add(floattostr(i)); end;
|
|||
![]() ![]() |
мисс_граффити |
![]()
Сообщение
#2
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
погрешность не в 0.1 ))))
смотри... 0.1 точно представить не удается (вот 0.5 - можно). то есть на самом деле у тебя будет идти не 0.0 0.1 0.2 ... 1.0 1.1 а, допустим, вот так: 0.0 0.1000000001 0.2000000002 0.3000000003 0.4000000004 .. 1.0000000010 <-вот в этом месте и произойдет выход из цикла, т.к. больше 1. погрешность составит 0.000000001 -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
![]() ![]() |
![]() |
Текстовая версия | 9.07.2025 10:04 |