[erlang-questions] erlang float comparison

Angel J. Alvarez Miguel clist@REDACTED
Mon May 14 09:41:01 CEST 2012



Hi guys



I need to compare two floats something like 0.99999998... vs 1.000000
and we came across accuracy problems when testing dihedral angles on a molecule...



so we read http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
and wanted to implement something like:



if (*(int*)&f1 < *(int*)&f2)...



when ef1 and f2 are floats... (f1 about 0.9999899.. and f2=1.0



is think we should start with...
 
<<Padding:16,Myint:64>> = term_to_binary(1.9999976,[{minor_version,1}]).



and let Padding swallow the external format and tag while Myint gets the ieee754 float 



But MyInt = 4611686017346523993 instead of 1073741822

these conversion should follow ieee754 and being lexicografic ordered
but ...

term_to_binary(1.99999976,[{minor_version,1}]).                  
<<131,70,63,255,255,255,191,147,83,89>>

term_to_binary(1.99999988,[{minor_version,1}]).
<<131,70,63,255,255,255,223,201,169,173>> 

doesnt seem to be the same thatn you spect to see after reading that page...


..What im doing wrong....?


ieee754 layout....


+1.99999976 
0x3FFFFFFE 
1073741822 
+1.99999988 
0x3FFFFFFF 
1073741823 
+2.00000000 
0x40000000 
1073741824 
+2.00000024 
0x40000001 
1073741825 
+2.00000048 
0x40000002 
1073741826

Thanks!..

/Angel 





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120514/efe5fffb/attachment.htm>


More information about the erlang-questions mailing list