Главная страница
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.028 c
14-1127592077
NikNet
2005-09-25 00:01
2005.10.16
Где взять компонент TCPParser?


1-1127494403
злобная танька
2005-09-23 20:53
2005.10.16
Инициализация массива


1-1127480355
RiP
2005-09-23 16:59
2005.10.16
подскажите как сделать анимацию из нескольких BMP


6-1115292522
Egorr
2005-05-05 15:28
2005.10.16
Прокси


2-1126873939
чайник5
2005-09-16 16:32
2005.10.16
fastreport