Lua整数溢出问题咨询:为何与官方文档描述不符?
Lua 5.3中整数溢出问题的原因分析
- 你参考的PIL文档是针对Lua 5.3之前版本的:Lua 5.3之前确实只有双精度浮点数作为唯一数字类型,但Lua 5.3开始新增了64位有符号整数类型,这是核心变化。
9223372036854775807是64位有符号整数的最大值,对它执行+1操作时,触发了有符号整数的溢出行为——按照补码运算规则,溢出后结果会循环到64位有符号整数的最小值-9223372036854775808。- Lua 5.3的数字类型是双精度浮点数与64位整数的联合类型:当输入的数值是整数且在64位有符号整数范围内时,Lua会默认以整数类型存储。如果要强制使用浮点数运算,可将数值写成浮点形式,比如执行
9223372036854775807.0 + 1,结果会是9.2233720368548e+18(浮点数的近似表示,不会触发溢出)。 - 你看到的PIL文档描述是正确的,但仅适用于Lua 5.3之前的版本,或是Lua 5.3中使用浮点数类型的场景,和当前触发整数溢出的情况无关。
内容的提问来源于stack exchange,提问作者lesnik
相关产品推荐
相关产品推荐

