Показать сообщение отдельно
  #3  
Старый 09.04.2012, 17:26
hypertigr hypertigr вне форума
Прохожий
 
Регистрация: 17.03.2009
Сообщения: 2
Репутация: 10
По умолчанию

Я понимаю что сравивать два вещественных числа = "тыкать пальцем в небо". Ошибку свою понял но несовсем.
Как я понял делфи считает что 5/0,1<50
Интересно как она называется и охото узнать правила недопущения подобных ошибок, а также представление типа double в памяти.

Вот моя модификация
Код:
program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  math;

function myFloor(x:double):integer;
begin
  if x>0 then result:=trunc(x)
         else result:=trunc(x)-1;
end;

procedure proc;
var a,b:double;
    c,d:integer;
begin
  a:=0.1;
  b:=5;
  c:=myFloor(b/0.1);
  d:=myFloor(b/a);
  writeln(c);
  writeln(d);
end;

begin
  proc;
  readln;
end.

результат
50
50

Застрахован ли такой подход от аналогичной ошибки при других значениях?
Ответить с цитированием