[erlang-patches] new float_to_list/2

Serge Aleynikov <>
Fri Jan 11 14:24:37 CET 2013


While looking at this I see that the code in folder
"erts/emulator/sys/vxworks" is present in maint but missing in the
master branch.  Is this intentional?  If so, should I remove the part of
the patch designed for vxworks?

On 1/11/2013 3:52 AM, Fredrik wrote:
> Hey,
> Could you please rebase this on current 'master' branch?
> 
> BR Fredrik Gustafsson
> Erlang OTP Team
> On 01/11/2013 04:06 AM, Serge Aleynikov wrote:
>> I implemented Lukas's recommendations that were presenting an acceptance
>> issue of the new function, so the current version of the patch does:
>>
>> 1. float_to_list/1 is backwards compatible.
>> 2. float_to_list(X,[]) gives the same result as float_to_list(X).
>> 3. float_to_list(X,[{decimals,N}]) uses the new fast implementation
>> (with the optional compact option).
>> 4. float_to_list(X,[{scientific,M}]) gives the same result as
>> float_to_list(X) with the ability to control the number of decimals.
>>
>> The only item from Lucas's list that I left unchanged was the
>> modification to erts/lib_src/common/erl_printf_format.c to take
>> advantage of the speed improvement of the new implementation.  I am
>> including a patch in this email that implements this logic, but I
>> decided to leave the integration task to the OTP team since
>> erl_printf_format.c is actually compiled into a liberts_internal.a
>> library and I didn't want to introduce a dependency of it on other code
>> - this should be decided by maintainers.
>>
>> The test cases of float_to_list/{1,2} have been updated.
>>
>> git fetch https://github.com/saleyn/otp/tree/float_to_list_2
>>
>> https://github.com/saleyn/otp/compare/maint...float_to_list_2
>> https://github.com/saleyn/otp/compare/maint...float_to_list_2.patch
>>
>> Regards,
>>
>> Serge
>>
>> On 8/23/2012 5:10 AM, Lukas Larsson wrote:
>>> Hi,
>>>
>>> I'll put it in the backlog and we'll see if it gets prioritized for R16B.
>>>
>>> As always if you (or someone else) wants make sure it gets in, the best
>>> way to ensure that is to send an updated patch.
>>>
>>> Lukas
>>>
>>>
>>> On 22/08/12 21:17, Serge Aleynikov wrote:
>>>> 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
>>>>>>
>>>> _______________________________________________
>>>> 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