Форум: "Основная";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.043 c