[erlang-patches] new float_to_list/2

Fredrik fredrik@REDACTED
Mon Jan 14 10:10:15 CET 2013


Hello,
This testcase is failing:
Suite: bif_SUITE
Testcase: specs
Reason:

The following BIFs don't have specs:

erlang:float_to_list/2

Give me notice when this is done,
BR Fredrik Gustafsson
Erlang OTP Team
On 01/11/2013 04:55 PM, Serge Aleynikov wrote:
> Sorry the test case line was the "last moment" add on.  It is fixed now
> in my branch below.
>
> On 1/11/2013 10:44 AM, Fredrik wrote:
>> Hey,
>> Your patch does not build:
>> "
>>
>> emulator_test ../emulator_test/num_bif_SUITE.erl:130: illegal pattern
>> "
>>
>>
>> Please have a look at it, and give me notice when you are done.
>>
>> BR Fredrik Gustafsson
>> Erlang OTP Team
>> On 01/11/2013 03:11 PM, Serge Aleynikov wrote:
>>> Ok. Here's the patch rebased to master:
>>>
>>> git fetch https://github.com/saleyn/otp/tree/float_to_list_2
>>>
>>> https://github.com/saleyn/otp/compare/master...float_to_list_2
>>> https://github.com/saleyn/otp/compare/master...float_to_list_2.patch
>>>
>>> Regards,
>>>
>>> Serge
>>>
>>> On 1/11/2013 8:53 AM, Björn-Egil Dahlberg wrote:
>>>> On 2013-01-11 14:24, Serge Aleynikov wrote:
>>>>> 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?
>>>> Yes. Any and all vxworks support has been removed in R16 from OTP except
>>>> for epmd, erl_interface and ic.
>>>>
>>>> // Björn-Egil
>>>>> 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
>>>>>>>>>>>>> erlang-patches@REDACTED
>>>>>>>>>>>>> http://erlang.org/mailman/listinfo/erlang-patches
>>>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> erlang-patches mailing list
>>>>>>>>>>> erlang-patches@REDACTED
>>>>>>>>>>> http://erlang.org/mailman/listinfo/erlang-patches
>>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> erlang-patches mailing list
>>>>>>>>> erlang-patches@REDACTED
>>>>>>>>> http://erlang.org/mailman/listinfo/erlang-patches
>>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> erlang-patches mailing list
>>>>>>>> erlang-patches@REDACTED
>>>>>>>> http://erlang.org/mailman/listinfo/erlang-patches

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-patches/attachments/20130114/2d9fa324/attachment.htm>


More information about the erlang-patches mailing list