couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul Davis <paul.joseph.da...@gmail.com>
Subject Re: Fixed precision of floating point number not respected in views
Date Tue, 19 Feb 2013 13:53:51 GMT
And doesn't address indexes.

On Tue, Feb 19, 2013 at 7:51 AM, Volker Mische <volker.mische@gmail.com> wrote:
> 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.
>
> Cheers,
>   Volker
>
> 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 <volker.mische@gmail.com> wrote:
>>> On 02/19/2013 10:13 AM, Paul Davis wrote:
>>>> On Tue, Feb 19, 2013 at 3:09 AM, Robert Newson <rnewson@apache.org>
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:
>>>>
>>>> http://bugs.python.org/issue1580
>>>>
>>>>> B.
>>>>>
>>>>> On 19 February 2013 08:20, Luca Morandini <lmorandini@ieee.org>
wrote:
>>>>>> On 02/19/2013 07:05 PM, Luca Morandini wrote:
>>>>>>>
>>>>>>> Folks,
>>>>>>>
>>>>>>> I have stored fixed precision numbers in a database, but when
they are
>>>>>>> spit out by
>>>>>>> a view, the precision is full, and -which is worse- the trailing
decimal
>>>>>>> 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
is
>>>>>> exactly what I observed... but what is meant as "client" in this
context, a
>>>>>> 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
>>>>>>
>>>
>

Mime
View raw message