[erlang-bugs] binary pattern matching fails with 32-bit float, if decimal representation of the number cannot be converted to binary exactly

Вадзім Зенька <>
Mon Aug 1 11:53:42 CEST 2011


WHAT:
binary pattern matching fails with 32-bit float, if decimal
representation of the number cannot be converted to binary exactly

EXAMPLE:
following code fails:

% "1.1" does not have exact binary representation
> case <<1.1:32/float>> of <<1.1:32/float>> -> ok end.
** exception error: no case clause matching <<63,140,204,205>>

> case <<63,140,204,205>> of <<1.1:32/float>> -> ok end.
** exception error: no case clause matching <<63,140,204,205>>

although

> case <<1.1:32/float>> of <<63,140,204,205>> -> ok end.
ok

% "1.5" has exact binary representation
> case <<1.5:32/float>> of <<1.5:32/float>> -> ok end.
ok

% 64-bit floats work well
> case <<1.1:64/float>> of <<1.1:64/float>> -> ok end.
ok

--
З павагай, Вадзім Зенька


+375.29.407.27.17


More information about the erlang-bugs mailing list