4
일반적으로 두 개의 부동 소수점은 매우 작은 수의 범위 내에 있는지 비교하여 비교합니다. 테이블 키는 키를 모른 채 존재하는지 여부를 모르기 때문에 작동하지 않습니다 (의미가있는 경우). 소수점 오류 부동를 차지하면서테이블 인덱스의 루아 부동 소수점 오류
기본적으로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')
, 어떻게 내가 테이블의 키를 찾을 수 있습니다 : 64 비트 컴퓨터에 루아 5.1
는예? 테이블의 각 키를 비교하지 않고도 작업 할 수 있기를 원하기 때문에 큰 테이블을 사용하여도 여전히 빠를 수 있습니다. 이미이 기능을 내장 할 수있는 기능이 있지만 아마도 찾을 수 없습니다.
도움이 될 것입니다.
감사합니다. 나는 그것에 대해서 생각조차하지 않았습니다. 또한 __newindex를 사용한 멋진 트릭! – Ryan
고정 숫자로 곱한 다음'math.floor'를 사용하는 방법은? – Deco
@Deco, 잘 작동하지만 잠재적 인 오버 플로우에주의해야합니다. – lhf