On Feb 19, 2013, at 1:09 AM, Robert Newson <rnewson@apache.org> 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 64bit floating point.
(The limitation here is that since 64bit doubles have a 56bit mantissa (IIRC), the largest
integer that can be represented precisely is about 10^16, corresponding to a prescaled 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 Couchcompatible replication engine.)
—Jens
