关于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这么大。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值