On Feb 19, 2013, at 1:09 AM, Robert Newson <[email protected]> wrote:

> 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.

Another alternative, if you need a certain number of decimal digits of 
precision, is to premultiply the numbers by a fixed power of ten. For example, 
it looks like the OP may need five digits after the decimal point, so 
multiplying the input values by 10^5 would turn them into integers. Then the 
value 151.17281 would be stored as 15117281, which of course can be represented 
precisely in 64-bit floating point.

(The limitation here is that since 64-bit doubles have a 56-bit mantissa 
(IIRC), the largest integer that can be represented precisely is about 10^16, 
corresponding to a pre-scaled input value of 10^11.)

The obvious advantage over string encoding is that you can add, subtract and 
compare numbers without having to do any conversion, and even if you do have to 
convert numbers (for multiplication, say) the conversion is very fast compared 
to string<->number conversions.

As for alternative data formats, there are a lot of them around, and I don’t 
see that EDN would have an advantage over any of the others that are better 
known and more widely adopted, like YAML. Changing away from JSON would be a 
compatibility nightmare, anyway (speaking as the author of a Couch-compatible 
replication engine.)

—Jens

Reply via email to