couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Volker Mische <>
Subject Re: Fixed precision of floating point number not respected in views
Date Tue, 19 Feb 2013 13:51:03 GMT
Or we stop converting the document body into Erlang and store them as
raw JSON strings, so that there is no Erlang<->JSON conversion going on.
I know that's a big change.


On 02/19/2013 01:57 PM, Paul Davis wrote:
> It used mochijson2 which uses mochinum.erl which uses arbitrary
> precision arithmetic which makes this a lot easier (IIRC, its the
> ability to raise numbers to arbitrarily large powers).
> I do agree the behavior would be nice if it could be provided but the
> runtime cost is prohibitive if implemented in Erlang (arbitrary
> precision arithmetic is also generally slower than FPU operations).
> Also, so we're being more specific, it returned numbers with the
> fewest number of digits required that could then be fed into a
> standard libc parsing algorithm to return the same floating point
> representation based on what's in RAM. There are other assumptions and
> caveats related to the various thingers as well.
> On Tue, Feb 19, 2013 at 6:47 AM, Volker Mische <> wrote:
>> On 02/19/2013 10:13 AM, Paul Davis wrote:
>>> On Tue, Feb 19, 2013 at 3:09 AM, Robert Newson <> wrote:
>>>> "I have stored fixed precision numbers in a database". You haven't,
>>>> unfortunately, because you can't. Javascript only has one kind of
>>>> number, 64-bit floating point.
>>> Its a tidge more complicated than that. Its actually a combination of
>>> the Erlang JSON decoder/encoder roundtrip plus the JavaScript decoder.
>> I remember that older version of Apache CouchDB (IIRC 1.1) did return
>> the numbers as they were put it. Don't know which decoder was used back
>> then.
>> I'd love to see this behaviour coming back.
>> Cheers,
>>   Volker
>>>> If you want fixed precision, you'll need to store your numbers in
>>>> strings and manipulate them that way too. A quick google in the past
>>>> has shown a few "bignum" libraries for Javascript.
>>> Though the end result is the same. If you need fixed precision
>>> numbers, then using JSON's syntax for "numbers with decimal points and
>>> non-zero digits after the decimal point" will lead to surprising
>>> results and lack of fidelity.
>>> I've had a few discussions on this for Jiffy in terms of round
>>> tripping something as trivial as 1.1 through a JSON decoder/encoder
>>> pair. Turns out this is really really hard.
>>> Here's the Python ticket where they added it to the language for a
>>> good discussion on the details required to make this actually work:
>>>> B.
>>>> On 19 February 2013 08:20, Luca Morandini <> wrote:
>>>>> On 02/19/2013 07:05 PM, Luca Morandini wrote:
>>>>>> Folks,
>>>>>> I have stored fixed precision numbers in a database, but when they
>>>>>> spit out by
>>>>>> a view, the precision is full, and -which is worse- the trailing
>>>>>> digits
>>>>>> are not all zeroes.
>>>>> In the CouchDB: The Definitive Guide", I have found out that "most clients"
>>>>> would interpret, say, 15.7 as 15.69999999999 (or so), which I suppose
>>>>> exactly what I observed... but what is meant as "client" in this context,
>>>>> view engine ?
>>>>> Anyway, any view to tune this feature of the JavaScript view engine ?
>>>>> Regards,
>>>>> Luca Morandini
>>>>> Data Architect - AURIN project
>>>>> Department of Computing and Information Systems
>>>>> University of Melbourne
>>>>> Tel. +61 03 903 58 380
>>>>> Skype: lmorandini

View raw message