比较 Lua 中的数字
Comparing numbers in Lua
我正在检查直线交点,需要确定交点(x
、y
)是否在线段的边界框内 l2
(由点 p1
和 p2
组成)
以下打印输出说明了我的问题:
交点是(100,300)
print("x",x,">=",math.min(l2.p1.x,l2.p2.x),x >= math.min(l2.p1.x,l2.p2.x))
print("x",x,"<=",math.max(l2.p1.x,l2.p2.x),x <= math.max(l2.p1.x,l2.p2.x))
print("y",y,">=",math.min(l2.p1.y,l2.p2.y),y >= math.min(l2.p1.y,l2.p2.y))
print("y",y,"<=",math.max(l2.p1.y,l2.p2.y),y <= math.max(l2.p1.y,l2.p2.y))
产量:
x 100 >= 100 true
x 100 <= 100 false
y 300 >= 140 true
y 300 <= 300 false
这是怎么回事,怎么解决的?
(Lua 版本 5.2.3)
向浮点运算问好:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
例如
> string.format("%.32f", 1/3)
0.33333333333333331482961625624739
> 1/3 == 0.3333333
false
所以这取决于您对 X 和 lp* 的计算方式。
比较浮点数时应该使用公差。
> math.abs(1/3 - 0.33) == 0
false
> math.abs(1/3 - 0.33333) < 1/10^6
false
> math.abs(1/3 - 0.33333) < 1/10^5
true
我正在检查直线交点,需要确定交点(x
、y
)是否在线段的边界框内 l2
(由点 p1
和 p2
组成)
以下打印输出说明了我的问题:
交点是(100,300)
print("x",x,">=",math.min(l2.p1.x,l2.p2.x),x >= math.min(l2.p1.x,l2.p2.x))
print("x",x,"<=",math.max(l2.p1.x,l2.p2.x),x <= math.max(l2.p1.x,l2.p2.x))
print("y",y,">=",math.min(l2.p1.y,l2.p2.y),y >= math.min(l2.p1.y,l2.p2.y))
print("y",y,"<=",math.max(l2.p1.y,l2.p2.y),y <= math.max(l2.p1.y,l2.p2.y))
产量:
x 100 >= 100 true
x 100 <= 100 false
y 300 >= 140 true
y 300 <= 300 false
这是怎么回事,怎么解决的?
(Lua 版本 5.2.3)
向浮点运算问好:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
例如
> string.format("%.32f", 1/3)
0.33333333333333331482961625624739
> 1/3 == 0.3333333
false
所以这取决于您对 X 和 lp* 的计算方式。 比较浮点数时应该使用公差。
> math.abs(1/3 - 0.33) == 0
false
> math.abs(1/3 - 0.33333) < 1/10^6
false
> math.abs(1/3 - 0.33333) < 1/10^5
true