<div dir="ltr">Oh.<br>so, which file should i patch, please?<br><br><br><div class="gmail_quote">2008/10/16 Bob Ippolito <span dir="ltr"><<a href="mailto:bob@redivi.com">bob@redivi.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Well, the float type in Erlang binaries by itself is big endian, not<br>
native endian. This is a bug in Erlang.<br>
<div><div></div><div class="Wj3C7c"><br>
On Wed, Oct 15, 2008 at 8:59 PM, WS Dao <<a href="mailto:chn.dao77@gmail.com">chn.dao77@gmail.com</a>> wrote:<br>
> my shell output is:<br>
><br>
> 4> <<1.0:64/float>>.<br>
> <<0,0,0,0,63,240,0,0>><br>
><br>
><br>
> as Tony said, S3C2410/ARM920T CPU , double float is "Middle Endian"<br>
><br>
> IEEE float:  12 34 AB CD<br>
> Middle Endian: AB CD 12 34<br>
><br>
><br>
> my toolchain doesn't support "-msoft-float" option.<br>
> [root@LH01 ~]# arm-unknown-linux-gnu-readelf -h<br>
> /tmp/cross-compile/lib/erlang/erts-5.6.4/bin/beam<br>
> ELF Header:<br>
>   Magic:   7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00<br>
>   Class:                             ELF32<br>
>   Data:                              2's complement, little endian<br>
>   Version:                           1 (current)<br>
>   OS/ABI:                            ARM<br>
>   ABI Version:                       0<br>
>   Type:                              EXEC (Executable file)<br>
>   Machine:                           ARM<br>
>   Version:                           0x1<br>
>   Entry point address:               0x21f84<br>
>   Start of program headers:          52 (bytes into file)<br>
>   Start of section headers:          1346104 (bytes into file)<br>
>   Flags:                             0x2, has entry point, GNU EABI<br>
>   Size of this header:               52 (bytes)<br>
>   Size of program headers:           32 (bytes)<br>
>   Number of program headers:         6<br>
>   Size of section headers:           40 (bytes)<br>
>   Number of section headers:         31<br>
>   Section header string table index: 28<br>
><br>
><br>
> My platform doesn't support clock_gettime(CLOCK_MONOTONIC,&ts) ,<br>
> /erts/emulator/sys/unix/sys.c, so I can't use debian binary.<br>
><br>
><br>
><br>
> 2008/10/15 Bob Ippolito <<a href="mailto:bob@redivi.com">bob@redivi.com</a>><br>
>><br>
>> There's code in io_lib_format.erl that does the default format floats,<br>
>> which assumes IEEE 754 floats. Perhaps the float<->binary code is<br>
>> broken on your platform, or your platform doesn't do IEEE 754?<br>
>><br>
>> This is the code in io_lib_format (in R12B3 anyway, I don't have R12B4<br>
>> installed on this machine):<br>
>><br>
>> mantissa_exponent(F) -><br>
>>    case <<F:64/float>> of<br>
>>        <<_S:1, 0:11, M:52>> -> % denormalized<br>
>>            E = log2floor(M),<br>
>>            {M bsl (53 - E), E - 52 - 1075};<br>
>>        <<_S:1, BE:11, M:52>> when BE < 2047 -><br>
>>            {M + ?BIG_POW, BE - 1075}<br>
>>    end.<br>
>><br>
>> Does the output for this differ in your shell? If so, then your Erlang<br>
>> VM isn't doing the right thing when converting floats to binary...<br>
>><br>
>> 1> <<1.0:64/float>>.<br>
>> <<63,240,0,0,0,0,0,0>><br>
>><br>
>><br>
>> 2008/10/15 WS Dao <<a href="mailto:chn.dao77@gmail.com">chn.dao77@gmail.com</a>>:<br>
>> > I cross-compiled OTP R12B4 for my ARM9 platform (S3C2410, kernel 2.4.18)<br>
>> > When I run erl on arm, float error occurs:<br>
>> > # ./erl<br>
>> > Eshell V5.6.4  (abort with ^G)<br>
>> > 1> 3+5.<br>
>> > 8<br>
>> > 2> 3.0.<br>
>> > 0.<br>
>> ><br>
>> > 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005307579804<br>

>> > 3> 3.0+4.0.<br>
>> ><br>
>> > 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000531405562<br>

>> > 4><br>
>> ><br>
>> > My toolchain is gcc <a href="http://3.4.5." target="_blank">3.4.5.</a>  I'd wrote a c test program and cross-compile<br>
>> > it,<br>
>> > no float problems found.<br>
>> ><br>
>> > Any suggestion?<br>
>> ><br>
>> ><br>
>> > -dao<br>
>> > _______________________________________________<br>
>> > erlang-questions mailing list<br>
>> > <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
>> > <a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
>> ><br>
><br>
><br>
</div></div></blockquote></div><br></div>