通常、私は2つのフロートを、それらが非常に少ない数の範囲内にあるかどうかを確認することによって比較します。テーブルキーについては、キーがわからないと存在するかどうかわからないため、機能しません(それが理にかなっている場合)。
64ビットコンピューターでのlua5.1の例:
a, b, c = 1.7, -0.8, -0.4
d = a + b + c -- prevents constant folding
print(string.format('%1.20f', d)) -- 0.49999999999999989000 (around 0.5)
assert(d ~= 0.5)
t = {[0] = 'foo', [0.5] = 'bar'}
print(t[d]) -- nil (I want it to print 'bar')
基本的に、浮動小数点エラーを考慮しながら、テーブル内のキーを見つけるにはどうすればよいですか?テーブル内の各キーと比較せずに動作させたいので、大きなテーブルでも高速にできます。これを行うための組み込み関数はおそらくすでに存在しますが、見つかりませんでした。
どんな助けでもいただければ幸いです!