lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On 9/7/13, pulleyzzz_gmail <pulleyzzz@gmail.com> wrote:
> for this code:
>
> a=tostring(1/3)
> print(1/3==tonumber(a))  -- false
>
> --if use .16g
>
> a=string.format('%.16g',1/3)
> print(1/3==tonumber(a))  -- true
>

Changing format to "%.16g" would not solve your problem of comparing
floats with == operator.

1/3 is computed in Lua natively in binary representation.

a=string.format('%.16g',1/3) is a binary representation converted to a
finite length
base-10 number. Very often it cannot be done without loss of accuracy.
Next, you are converting it to binary again with tonumber(a) which
causes another loss of accuracy.

As a rule of thumb do not compare floats with == operator. It will
lead to subtle and
difficult to catch errors.

--Leo--