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

Serge Aleynikov <>
Wed Jan 12 18:13:34 CET 2011


I did a micro-benchmark on a slightly modified version of the BIF that 
accepts an integer as its options.  The results shown below display a 
very insignificant difference between a call with no options and a call 
with an integer precision passed as the second argument:

1> test:test().
float_to_list(123.4, [])               = {0.619512,"123.4000"}
float_to_list(123.4, [{precision, 4}]) = {0.624895,"123.4000"}
float_to_list(123.4, 4)                = {0.622896,"123.4000"}

The majority of time is actually spent in the printf(3) function, which 
takes longer to execute when given the "%.*f" argument compared to "%g" 
as in float_to_list/1 case.

Did your patch rely on printf?


On 1/12/2011 9:23 AM, Gleb Peregud wrote:
> Some time ago I've submitted similar but simpler patch. It was a
> float_to_list/2 with a second parameter being an integer specifying
> precision. For me it was important to generate A LOT of floats as
> strings as fast as possible with specified precision. Serge's version
> has an overhead of inspecting proplist of the second parameter. So I
> was wondering about introducing two versions of this function: with a
> proplist as a second parameter and with a number as a second
> parameter. Alternatively proplist version can be factored out into
> float_to_list_opts/2.
>
> Just my 0.2 cents
>
> On Wed, Jan 12, 2011 at 15:10, Serge Aleynikov<>  wrote:
>> The reason I called it precision was to be consistent with the naming
>> convention of the printf function.  Below is the extract from "man 3
>> printf", which refers to the digits after the decimal point as "precision":
>>
>>        f, F   The  double  argument is rounded and converted to decimal
>>               notation in the style [-]ddd.ddd, where the number of
>>               digits after the decimal-point character is equal to the
>>               precision specification.  If the precision is missing,
>>               it  is taken as 6; if the precision is explicitly zero,
>>               no decimal-point character appears.  If a decimal point
>>               appears, at least one digit appears before it.
>>
>> I don't have a very strong preference for calling it precision or scale, but
>> I do have a strong preference for including this patch in the distribution,
>> because the default behavior of float_to_list/1 hard-coded in C is
>> deficient.
>>
>>
>> On 1/12/2011 4:58 AM, nox wrote:
>>>
>>> Il should be called "scale", shouldn't it?
>>>
>>> Le 12 janv. 2011 à 10:26, Pierpaolo Bernardi<>    a écrit
>>> :
>>>
>>>> On Wed, Jan 12, 2011 at 06:44, Serge Aleynikov<>
>>>>   wrote:
>>>>>
>>>>> Attached please find a patch that adds a new float_to_list/2 BIF.  The
>>>>> patch
>>>>> was created off of the master branch of https://github.com/erlang/otp.
>>>>>
>>>>> This BIF solves a problem of float_to_list/1 that doesn't allow
>>>>> specifying
>>>>> the number of digits after the decimal point when formatting floats.
>>>>>
>>>>>         float_to_list(Float, Options) ->    string()
>>>>>
>>>>>         Float = float()
>>>>>         Options = [Option]
>>>>>         Option = {precision, Precision::integer()} | compact
>>>>>
>>>>>         Text representation of a float formatted using given options
>>>>>
>>>>>         Returns a string which corresponds to the text
>>>>>         representation of Float using fixed decimal point formatting.
>>>>>         When precision option is specified
>>>>>         the returned value will contain at most Precision number of
>>>>>         digits past the decimal point.  When compact option is provided
>>>>>         the trailing zeros at the end of the list are truncated.
>>>>
>>>> I think the option is misnamed.
>>>>
>>>> In the usual terminology, 'precision' is the total number of
>>>> significative digits, not only the ones past the decimal point.
>>>>
>>>> Cheers
>>>> P.
>>>>
>>>> ________________________________________________________________
>>>> erlang-questions (at) erlang.org mailing list.
>>>> See http://www.erlang.org/faq.html
>>>> To unsubscribe; mailto:
>>>>
>>
>> ________________________________________________________________
>> erlang-questions (at) erlang.org mailing list.
>> See http://www.erlang.org/faq.html
>> To unsubscribe; mailto:
>>
>>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: test.erl
URL: <http://erlang.org/pipermail/erlang-patches/attachments/20110112/6cbb8b94/attachment.ksh>


More information about the erlang-patches mailing list