为什么LUA5.1错误地解释某些整数?
Lua5.1将许多完全有效的64b整数解释为为什么LUA5.1错误地解释某些整数?,lua,integer,Lua,Integer,Lua5.1将许多完全有效的64b整数解释为 1,805,996,217,335,808,768 而最大的有符号有效64b整数为 9,223,372,036,854,775,807 下面是一个不幸输出的示例: Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio > return 1805996217335808768 == 1805996217335808804 true > return 180599621733580876
1,805,996,217,335,808,768
而最大的有符号有效64b整数为
9,223,372,036,854,775,807
下面是一个不幸输出的示例:
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> return 1805996217335808768 == 1805996217335808804
true
> return 1805996217335808768 == 1805996217335808805
true
> return 1805996217335808768 == 1805996217335808806
true
> return 1805996217335808768 == 1805996217335808769
true
> return 1805996217335808768 == 1805996217335808767
true
人们希望看到false
到处都是true
编辑(标记为重复):
这不是的副本,因为您无法编译Lua 5.1来处理64b整数。Lua 5.1使用精度为53位的双精度类型 只有数字的前53位将存储在双分数部分。 最大有效整数为9007199254740991。若数字大于9007199254740991,则53位之前的最后一位将归零 54位数字:
18014398509481983 = 111111111111111111111111111111111111111111111111111111b
内部将存储为
18014398509481982 = 111111111111111111111111111111111111111111111111111110b
因为只使用前53位,所以两者相等。Lua在5.3之前没有整数。它们是64位浮点,与JavaScript类似,只能表示2^53以下的整数−1明确无误。经典的“这不是一个bug,它是一个特性”。谢谢你的回复!可能是重复的,这不是一个“特征”。这就是为什么他们在5.3中修复了它