  lua-l archive

• Subject: Re: Numeric key collision related bug in Lua 5.3
• From: Roberto Ierusalimschy <roberto@...>
• Date: Thu, 23 Apr 2015 05:04:44 -0300

```> The problem is the current definition of equality. The way it is
> defined (compare integer-float converting the integer to float) makes
> it non transitive:
>
> > t1 = (1<< 62) + 1
> > t2 = t1 + 2
> > t3 = t1 + 0.0    -- will be rounded to 2^62
> > print(t1 == t3, t2 == t3, t1 == t2)
>    --> true	true	false
>
> That is all good, until you try to put these values as indices
> in a table. Because there is no transitivity, there is no
> partition. Dependening on the order that these elements are compared
> to each other, they will collide (or not) in different ways.

Note that key tables are normalied to integers when possible, so this
problem only occurrs with 2^64. This is the only float value that can
be equal to an integer value (according to the old/current equality
definition) but cannot be converted to an integer.

-- Roberto

```