Погрешность вычисления |
Погрешность вычисления |
kosyak |
18.06.2008 0:11
Сообщение
#1
|
|||
Пионер Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: 0 |
Прошу прощение, если тема не в том разделе и может об этом было уже сказано (я не нашел)
Кто-нибудь может объяснить, почему так? Код 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;
|
|||
andriano |
18.06.2008 20:29
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
В Турбо Паскале и в Делфи real - разные типы, поэтому и ведут себя по разному (например, с точки зрения округления). К счастью, эта разница сказывается исключительно в неправильно написанных программах.
А как производить вычисления правильно, есть целая наука, называется - численные методы. Так что сабж неверен: ошибка не Паскаля, а автора программы. Сообщение отредактировано: andriano - 18.06.2008 20:30 |
Текстовая версия | 29.04.2024 5:03 |