Пример:

Код:
a = 4.24264068711928*4.24264068711928;
b = 18;
c = 18;
trace(a==b); // false
trace(b==c); // true
В декомпиле:

Код:
a = 18;
b = 18;
c = 18;
trace (a == b);
trace (b == c);
В реальности:

Код:
constants 'a', 'b', 'c'
push 'a', 18.00
setVariable
push 'b', 18
setVariable
push 'c', 18
setVariable
push 'a'
getVariable
push 'b'
getVariable
equals
trace
push 'b'
getVariable
push 'c'
getVariable
equals
trace
end
Как видим, 18.00 и 18 совсем не равны.
В байт коде:
push 'a', 18.00 это:

Код:
960B00080006FFFF3140F4FFFFFF
А push 'b', 18 это:

Код:
96070008010712000000
И, наконец, push 'c', 18 это:

Код:
96070008020712000000
Как видно, последние два push имеют тип 07h, т.е. integer, целое число. А в первом случае 06h (видимо, double 64bit). В общем, особо не разбирался да и лень.
Идеальной точности не добиться. Особенно при работе с корнями.