[erlang-questions] erlang float comparison

Hynek Vychodil hynek@REDACTED
Mon May 14 09:58:54 CEST 2012


Anyway if you are willing shoot yourself in the foot:

1> F = fun(X) when is_float(X) -> <<V:32,_/binary>> = <<X/float>>, V end.
#Fun<erl_eval.6.82930912>
2> [F(X) || X<-[0.99999998, 1.000000, 1.99999976, 1.99999988]].
[1072693247,1072693248,1073741823,1073741823]


On Mon, May 14, 2012 at 9:50 AM, Hynek Vychodil <hynek@REDACTED> wrote:

> 1> 0.99999998 < 1.000000.
> true
> 2> 1.99999976 < 1.99999988.
> true
>
> What's the problem?
>
> On Mon, May 14, 2012 at 9:41 AM, Angel J. Alvarez Miguel <clist@REDACTED>wrote:
>
>> **
>>
>>
>> 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
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-questions
>>
>>
>
>
> --
> Hynek Vychodil
> Chief Scientists
>
> GoodData
> náměstí 28. října 1104/17, 602 00, Brno - Černá Pole
> Office:   +420 530 50 7704
> E-mail:  hynek@REDACTED
> Web:     www.gooddata.com
>



-- 
Hynek Vychodil
Chief Scientists

GoodData
náměstí 28. října 1104/17, 602 00, Brno - Černá Pole
Office:   +420 530 50 7704
E-mail:  hynek@REDACTED
Web:     www.gooddata.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120514/db4f9686/attachment.htm>


More information about the erlang-questions mailing list