lua里头number变量的边界值是多少
lua里面number变量的边界值是多少
没有找到lua的讨论区, 就写在这吧
在lua里面做数字加法运算, 超过百万级的数字都能算出正确结果, 貌似没有越界问题, 很奇怪哦
------解决方案--------------------
首先抱歉我之前说的有误,double的有效位不是53位而是52位(我刚wiki过),
加上1个隐含位,1个符号位,一共54位,
因此有效其范围是[-2^53, +2^53]
但是我看了楼主的回复,楼主应该是没理解我的意思
所谓的有效范围,是指可以当作整数安全使用的范围,而不等价于54位整数
也就是说超过这个范围后就不能按照整数的方法计算了,因为浮点精度不够
下面这个例子可以说明问题:
local i = 2^53
local j = i + 1
local k = i - 1
print(j - i) -- 2^53 + 1 - 2^53
print(k - i) -- 2^53 - 1 - 2^53
结果是:
0
-1
原因就是2^53+1已经超出了54位整数的有效范围,而2^53-1还在有效范围之内
想要完全弄明白这个事情,需要了解浮点数存储的原理:
http://zh.wikipedia.org/wiki/IEEE_754
没有找到lua的讨论区, 就写在这吧
在lua里面做数字加法运算, 超过百万级的数字都能算出正确结果, 貌似没有越界问题, 很奇怪哦
------解决方案--------------------
首先抱歉我之前说的有误,double的有效位不是53位而是52位(我刚wiki过),
加上1个隐含位,1个符号位,一共54位,
因此有效其范围是[-2^53, +2^53]
但是我看了楼主的回复,楼主应该是没理解我的意思
所谓的有效范围,是指可以当作整数安全使用的范围,而不等价于54位整数
也就是说超过这个范围后就不能按照整数的方法计算了,因为浮点精度不够
下面这个例子可以说明问题:
local i = 2^53
local j = i + 1
local k = i - 1
print(j - i) -- 2^53 + 1 - 2^53
print(k - i) -- 2^53 - 1 - 2^53
结果是:
0
-1
原因就是2^53+1已经超出了54位整数的有效范围,而2^53-1还在有效范围之内
想要完全弄明白这个事情,需要了解浮点数存储的原理:
http://zh.wikipedia.org/wiki/IEEE_754