[erlang-patches] [patch] new float_to_list/2

Serge Aleynikov <>
Wed Aug 22 21:17:03 CEST 2012


I am certainly very happy to hear that you finally agreed to include
this in the distribution.  The changes proposed below seem reasonable
and simple.  Will the OTP team be able to modify my patch to implement them?

On 8/22/2012 12:01 PM, Lukas Larsson wrote:
> Hello Serge!
> 
> I think we have finally agreed how we want this functionality to work.
> 
> float_to_list/1 should be left as it is now for backwards compatibility.
> float_to_list(1.0,[]) should give the same as float_to_list(1.0).
> float_to_list(1.0,[{decimals,X}]) should use your faster implementation
> (with the optional compact option).
> float_to_list(1.0,[{scientific,Y}]) should give the same as
> float_to_list(1.0) if Y is 20.
> 
> We would also like the string rendering part of sys_double_to_chars_fast
> to be put into erts/lib_src/common/erl_printf_format.c:fmt_double. This
> way other parts of the vm which print floats will benefit from your
> changes!
> 
> I hope our indecisiveness have not caused you to shy away from taking
> this feature into Erlang/OTP. If you have any further questions or
> ponderings just let me know.
> 
> Lukas
> 
> On 18/07/12 20:47, Serge Aleynikov wrote:
>> On 7/18/2012 5:18 AM, Lukas Larsson wrote:
>>> However, I would also like the fast functionality to be used by
>>> float_to_list_1 as well, is possible to do this and stay backwards
>>> compatible? Hopefully you just have to shift the comma and add e+XX at
>>> the end of the optimized case and call sys_double_to_chars for the
>>> unoptimized.
>> See my comments below regarding 'scientific' option.  Since
>> float_to_list_2 is a new function I would think that you are questioning
>> the issue of backward compatibility only in terms of converting
>> float_to_list_1 to use float_to_list_2 implementation.  However, I think
>> that this will have adverse performance tax on float_to_list_2, which
>> will diminish the benefit.  It's been a while however, since I wrote
>> that patch, perhaps there's a way to retrofit scientific notation
>> without a performance penalty.
>>
>> It's more than simple shifting of the comma, since there's also rounding
>> involved.
>>
>> This case is easy:
>>
>> 4> float_to_list(1.01234).
>> "1.01234000000000001762e+00"
>> 5> float_to_list(1.01234, [{decimals, 20}]).
>> "1.01234000000000001762"
>>
>> This case is a bit more complex (illustration of rounding impact):
>>
>> 7> float_to_list(10123412345.0123451234).
>> "1.01234123450123443604e+10"
>> 8> float_to_list(10123412345.0123451234, [{decimals, 20}]).
>> "10123412345.01234436035156250000"
>>
>>> Also float_to_list(1.0) should return the same thing as
>>> float_to_list(1.0,[]), otherwise the API will be inconsistent with how
>>> other such APIs work.
>> Actually if you trace this subject back there was another request that
>> the default number of decimals is chosen to be consistent with what
>> printf() does, so I changed the implementation to accommodate that
>> request:
>>
>> Eshell V5.9  (abort with ^G)
>> 1> float_to_list(1.0, []).
>> "1.000000"
>>
>> Which is different from the default of float_to_list/1:
>>
>> 2> float_to_list(1.0).
>> "1.00000000000000000000e+00"
>>
>> Maybe one could introduce a 'scientific' option to float_to_list/2, to
>> use the float_to_list/1 implementation?
>>
>> Serge
>>
>>> On 24/05/12 16:02, Serge Aleynikov wrote:
>>>> Henrik,
>>>>
>>>> Fetch:    git fetch https://github.com/saleyn/otp/tree/float_to_list_2
>>>> Diff:    https://github.com/saleyn/otp/compare/float_to_list_2
>>>>
>>>> I added the definition for the new BIF to make the type checker happy:
>>>> https://github.com/saleyn/otp/commit/f9ddbeda5426ca83cda03c06a9860220ea4a22c7
>>>>
>>>>
>>>>
>>>> Once you do the "otp_build tests", how do you execute all tests suites
>>>> in $ERL_TOP or if possible only tests in a given SUITE?  I tried the
>>>> following but all tests fail:
>>>>
>>>> [otp/erts/emulator/test]$ ../../../bin/erl -noshell -s test_server_ctrl
>>>> run_test DIR "." -s erlang halt
>>>>
>>>> I did however run individual tests in bif_SUIT:types to make sure my
>>>> patch didn't break anything.
>>>>
>>>>
>>>>
>>>> Serge
>>>>
>>>> On 5/24/2012 5:17 AM, Henrik Nord wrote:
>>>>> Hi again.
>>>>>
>>>>>
>>>>> This test is not passing: emulator/bif_SUIT:types
>>>>>
>>>>> No type information:
>>>>>
>>>>> [{erlang,float_to_list,2}]
>>>>>
>>>>>
>>>>>
>>>>> On 04/21/2012 07:19 AM, Serge Aleynikov wrote:
>>>>>> git fetch https://github.com/saleyn/otp/tree/float_to_list_2
>>>> _______________________________________________
>>>> erlang-patches mailing list
>>>> 
>>>> http://erlang.org/mailman/listinfo/erlang-patches
>>>>
>>>
>> _______________________________________________
>> erlang-patches mailing list
>> 
>> http://erlang.org/mailman/listinfo/erlang-patches
>>
> 


More information about the erlang-patches mailing list