IPB
ЛогинПароль:

> Погрешность вычисления
сообщение
Сообщение #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;


М
Название темы отредактировано.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


В Турбо Паскале и в Делфи real - разные типы, поэтому и ведут себя по разному (например, с точки зрения округления). К счастью, эта разница сказывается исключительно в неправильно написанных программах.
А как производить вычисления правильно, есть целая наука, называется - численные методы.

Так что сабж неверен: ошибка не Паскаля, а автора программы.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 3:34
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name