首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

lua里边number变量的边界值是多少

2013-09-07 
lua里面number变量的边界值是多少没有找到lua的讨论区, 就写在这吧在lua里面做数字加法运算, 超过百万级的

lua里面number变量的边界值是多少
没有找到lua的讨论区, 就写在这吧
在lua里面做数字加法运算, 超过百万级的数字都能算出正确结果, 貌似没有越界问题, 很奇怪哦
[解决办法]

引用:
Quote: 引用:

lua使用double类型,故有53个有效位,外加一个隐含位,一个符号位,共55位
也就是[-2^54, +2^54]


local i = 18014398509481984 --2^54
local j = i+1
if i > 0 then
XLMessageBox(j)--j的值为18014398509481985
end
if true then return end

如果是这样, 那么j应该变成-18014398509481984才对
反正我测试的是不管多大都能得出正确结果
就跟放在windows计算器程序里面算一样


首先抱歉我之前说的有误,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

热点排行