关于lua的math.huge有多大的问题
结论
先上结论:
math.huge返回的是c中的HUGE_VAL。
而c中的HUGE_VAL则为double的最大值。
double的最大值为1.79769e+308。
Double占用多少位?为什么不是1024位?
为什么都说double 占用8bytes,64bit?2的64次方只有1.8446744e+19.
所以,这里HUGE_VAL则为double的最大值其实不对?
其实double真只占64位。
1.79769e+308,是1.79769乘以10的308次方,要复习小学的科学记数法了;最大值等于2的1024次方,但不是占用1024bit / (8bit/byte) =128 bytes哦,是占用64bit=8bytes,因为double是”1位符号位 8位指数位 52位尾数“这样表示的。即如果是精确表示1.79769e+308是要1024位,但是double不是精确表示的,用64位就够了。
参考
C 运行时库 (CRT) 参考 全局常量 HUGE_VAL、_HUGE
云风的Lua 5.3 参考手册
云风的Lua 5.1 参考手册-中文半成品
int float double 最大值,最小值
2的1024次方是多少啊?
简单理解float和double、单精度和双精度
Ps:
Lua 环境安装
window下你可以使用一个叫"SciTE"的IDE环境来执行lua程序,下载地址为:
本站下载地址:LuaForWindows_v5.1.4-46.exe
Github 下载地址:https://github.com/rjpcomputing/luaforwindows/releases
Google Code下载地址 : https://code.google.com/p/luaforwindows/downloads/list
双击安装后即可在该环境下编写 Lua 程序并运行。
你也可以使用 Lua 官方推荐的方法使用 LuaDist:http://luadist.org/
Demo
搞点demo看看
无穷等于无穷
local a = 1 + math.pow(10, 311)
print(a)
local b = 1 + math.pow(10, 310)
print(b)
if a > b then
print("a > b")
elseif a == b then
print ("a == b")
else
print("a < b")
end
输出为:
INF
INF
a == b
INF为infinite,无穷的。
无穷等于无穷。
math.huge有多大
settimer(0.1, self._time, self, false)
local i = 1
function LoginView:_time()
i = i + math.pow(10, 307)
print("TCL: i", i)
if i < math.huge then
settimer(0.1, self._time, self, false)
end
end
可以看到,math.huge差不多就是1.79769E308这么大。