Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Real type   Найти похожие ветки 

 
Axis_of_Evil ©   (2005-09-26 16:50) [0]

вопрос =
0) x: Real;
   if (x = 1.123) then;
очевидно неверно, т.к. точное равенство получается в
случаях, когда число представимо в виде конечной двоичной дроби.

1) x := 0.0;
   if (x = 0.0) then;
можно ли так?
// будет ли х точным нулем? (аки константа +-infinity)
зависит ли от чего-либо? // cross-(platform/compiler)


 
umbra ©   (2005-09-26 16:55) [1]

Если использовать нецеліе числа, то сравнивать их надо функциями

function SameValue(const A, B: Single; Epsilon: Single = 0): Boolean; overload;
function SameValue(const A, B: Double; Epsilon: Double = 0): Boolean; overload;
function SameValue(const A, B: Extended; Epsilon: Extended = 0): Boolean; overload;

из модуля Math


 
Axis_of_Evil ©   (2005-09-26 17:39) [2]

мораль =
 ошибка происходит при закидывании переменной типа Real (8 bytes)
 в FPU (10 bytes), с типом Extended (10 bytes) проблем меньше
т.е.
===========
x: Extended;
y: Real;
begin
 y := 1.12134;
 x := 1.12134;
 if (x = y) then
   write("!");
 readln;
===========
не выдаст "!"

но

===========
x: Extended;
begin
 x := 1.12134;

 if (x = 1.12134) then
   write("!");
 readln;
===========
работает

пример же
===========
y: Real;
begin
 y := 1.12134;
 if (н = 1.12134) then
   write("!");
 readln;
===========
не работает

что и трнбовалось осознать.
на вопрос топика не ответил:>



Страницы: 1 вся ветка

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.063 c
8-1116500972
poo
2005-05-19 15:09
2005.10.16
воспроизведение wave


14-1127314797
GRAND25
2005-09-21 18:59
2005.10.16
Сборная России по футболу


2-1127122606
мух
2005-09-19 13:36
2005.10.16
Чтение и запись структуры данных в файл через TFileStream


2-1126689186
Andrushk
2005-09-14 13:13
2005.10.16
Перекрестные ссылки


6-1111927099
Nes
2005-03-27 16:38
2005.10.16
IdUDPClient & IdUDPServer ==> Вешаться или подскажите?