-
Друзья, подскажите, как мне отловить проблему? Впервые сталкиваюсь с такой интересной багой... Куда копать даже не представляю)) Вообщем есть две переменных, значения которых вроде как равны (по данным отладчика), а вот >= между ними говорит что False. Как такое возможно??? Скрин с отладчика: http://savepic.net/9994213.htm
-
p - что за тип? сравнение вещественных меж с собой и с другими типами - это уже многократно обсуждалось.
-
-
TPoint2D = record x, y: Double; end;
-
Double и там и там
-
Вообщем, разобрался. Помогло что-то наподобии SameValue только собственного приготовления и код вроде
b_min_x := (p.x > min_x) or geomlib.Equal(p.x, min_x, geomlib.EQU_PRECISSION);
но такие костыли не радуют((
-
-
> костыли не радуют((
не используй точку. ведь всё относительно.
-
NaN <> NaN
Кстати, как он устроен(я не про 0.0/0.0) - что лежит в переменной?
-
нашел: NaN
Some operations of floating-point arithmetic are invalid, such as taking the square root of a negative number. The act of reaching an invalid result is called a floating-point exception. An exceptional result is represented by a special code called a NaN, for "Not a Number". All NaNs in IEEE 754-1985 have this format:
sign = either 0 or 1. biased exponent = all 1 bits. fraction = anything except all 0 bits (since all 0 bits represents infinity).
-
> картман © (26.09.17 00:15) [8]
> Кстати, как он устроен(я не про 0.0/0.0) - что лежит в переменной?
RTFM: Delphi help: Real Types. The Double type
An 8-byte (64-bit) Double number is divided into three fields s[1]e[11]f[52]
The value v of the number is given by ,, if e = 2047 and f <> 0, then v is a NaN
-- Regards, LVT.
-
> [7] KilkennyCat © (25.09.17 23:52) > не используй точку. ведь всё относительно.
Если надо с фиксированной точкой, а если надо именно с плавающей точкой, то её и надо использовать.
-
> Это не костыли, а учет особенностей машинной арифметики > вещественных чисел. Увы, их действительно приходится учитывать, > так уж устроена машина.http://delphikingdom.com/asp/viewitem. > asp?catalogid=374
Спасибо, почитаем. Еще понял что нужно весь код перелопатить на предмет таких сюрпрайзов))
|