Главная страница
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.038 c
14-1127509369
Ihor Osov'yak
2005-09-24 01:02
2005.10.16
Об науке воровать и искусстве скрываться... Или почти "


14-1127425578
Eraser
2005-09-23 01:46
2005.10.16
Multicast


14-1127897526
pazitron_brain
2005-09-28 12:52
2005.10.16
:( Бесплатный интернет ... ?


14-1127746766
Igorek
2005-09-26 18:59
2005.10.16
Какие ваши точные координаты?


6-1120112485
Леха.
2005-06-30 10:21
2005.10.16
POST