local a = 1.0
-- a = 1.0
local b = (0.3 * 3) + 0.1
-- b = 1.0
local exact = string.format("%.17g", b)
-- exact = 0.99999999999999989
-- Wrong way to compare
local is_equal1 = a == b
-- is_equal1 = false
-- Correct way: the difference against a tolerance
local eps = 1e-9
local is_equal2 = math.abs(a - b) < eps
-- is_equal2 = true
-- The classic case
local sum = 0.1 + 0.2
local is_equal3 = sum == 0.3
-- is_equal3 = false
local is_equal4 = math.abs(sum - 0.3) < eps
-- is_equal4 = true
print("a = " .. a)
print("b = " .. b)
print("exact = " .. exact)
print("is_equal1 = " .. tostring(is_equal1))
print("is_equal2 = " .. tostring(is_equal2))
print("is_equal3 = " .. tostring(is_equal3))
print("is_equal4 = " .. tostring(is_equal4))