Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.025 c
1-1127472716
el_bandito
2005-09-23 14:51
2005.10.16
Хук на ключ реестра


1-1127710502
Ярослав
2005-09-26 08:55
2005.10.16
выделение прямоугольного блока


2-1127120812
Андрей гость
2005-09-19 13:06
2005.10.16
сложный запрос с заменой символов


1-1127475917
__DATA__
2005-09-23 15:45
2005.10.16
Получение данных из Exel-я


14-1127555455
Goga
2005-09-24 13:50
2005.10.16
переведите на delphi Спасибо




   Наверх