Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Странный результат работы алгоритма


Автор: Алина 20.12.2005, 13:21
две программки:
Код

var e: extended;
      i: longint;
begin
e:=1;
while(e>0)
  begin
  inc(i);
  e:=e/10;
  end;
showmessage(inttostr(i));

и
Код

var e: extended;
      i: longint;
begin
e:=1;
while(e+1>1) // изменили условие e>0 на e+1>1
  begin
  inc(i);
  e:=e/10;
  end;
showmessage(inttostr(i));

выдают результаты: первая - 20, вторая - 4950.
Что есть правильное значение и почему такой результат?

Автор: Snowy 20.12.2005, 13:29
Никакой. И то и другое - неправильно.
Правильный ответ - бесконечность.
Разница лишь в погрешности округления.

Автор: ~FoX~ 20.12.2005, 13:47
Все верно, как только значение E вылазит за 20 символов (10 байт) последующие цифры не беруться в расчет.....У меня она вываливеат первая i=12732847 вторая i=12727916


Автор: Alcohol 20.12.2005, 20:26
Если это прога для определения машинного эпсилон как я понял, то все вабще в корне не так,
а вот так. Не знаю зачем там правда этот счетчик.
Код

var eps:extended;

begin
eps:=1;
while (eps/2+1)>1 do
eps:=eps/2;
Showmessage('Машинное эпсилон='+Floattostr(eps));
end;

Автор: Гость_Алина 21.12.2005, 11:12
Эта прога для определения числа значащих знаков после запятой. Взята из учебника Ландау, Липшица, проверенного временем.

Пусть даже алгоритм и сомнителен, но почему поменяв условие, получили диаметрально разные результаты?

У меня получается ровно 20 и 4 тысячи с хвостиком...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)