[erlang-bugs] io_lib_format:fwrite_g/1 on arm

George Bronnikov yura.bronnikov@REDACTED
Fri May 23 16:22:22 CEST 2008


In recent versions (since R12B0?), io_lib_format:fwrite_g/1, which is
the default function for printing floats, analyzes its argument using
a bit pattern (mantissa_exponent is a helper function called from
fwrite_g):

mantissa_exponent(F) ->
    case <<F:64/float>> of
        <<_S:1, 0:11, M:52>> -> % denormalized
            E = log2floor(M),
            {M bsl (53 - E), E - 52 - 1075};
        <<_S:1, BE:11, M:52>> when BE < 2047 ->
            {M + ?BIG_POW, BE - 1075}
    end.

Unfortunately, on Linux/arm (at least in my configuration), a float
has its 32-bit words swapped, so the function produces garbage.
Reverting to the version from R11B-4 (which just calls fwrite_g/4 with
appropriate defaults) gets rid of the bug.

Configuration: iPaq3900, Familiar 0.8.4, Linux
2.4.19-rmk6-pxa1-hh41.1, glibc 2.3.90, gcc-3.4.4.

George



More information about the erlang-bugs mailing list