Thoughts on IEEE P754
david.hopwood at industrial-designers.co.uk
Fri Aug 22 11:28:19 PDT 2008
Jason Orendorff wrote:
> On Fri, Aug 22, 2008 at 6:22 AM, Sam Ruby <rubys at intertwingly.net> wrote:
>> On Fri, Aug 22, 2008 at 2:30 AM, Jason Orendorff
>> <jason.orendorff at gmail.com> wrote:
>>> var a = ;
>>> a = "first";
>>> a[0.0m] = "second"; // a second property?
>>> a[0.000m] = "third"; // a third?
>> It seems to me that if trailing zeros are retained in a call to
>> ToString, then to be consistent with ES3, the three assignments above
>> would produce three properties. And if trailing zeros are lost, you
>> would expect to only have one. Both approaches are internally
>> consistent, and it surprises me to see either one characterized as
>> "breaking" array lookup.
> Well, the intuition is that two equal numbers should index the same
> property. This is an invariant in ES3 and it makes a lot of sense.
Two values that are === should index the same property [*]. Two values that
are == do not, in general.
So, it would be possible to make === take into account trailing zeroes,
while == ignores them. Given that the trailing zeroes are supposed to be
semantically significant ("scale preservation"), there's a strong case
for saying that values that differ only by trailing zeroes should be
distinguishable -- and if not by ===, then how?
One can argue about the merits or otherwise of scale preservation, but
it's an intentional property of the P754 decimal floating point design.
See section 2 of <http://speleotrove.com/decimal/IEEE-cowlishaw-arith16.pdf>
for the arguments in favour (which I'm not sure I buy into fully).
[*] but not conversely: two values that index the same property are
not necessarily ===.
More information about the Es-discuss