课程入口
1. math
库常用函数
(1) 基础运算
-
**math.abs(x)
**
取绝对值,常用于距离计算、坐标转换。
print(math.abs(-10)) -- 输出 10
-
**math.floor(x)
和 math.ceil(x)
**
floor
:向下取整(返回 ≤ x 的最大整数)。
ceil
:向上取整(返回 ≥ x 的最小整数)。
print(math.floor(3.7)) -- 输出 3
print(math.ceil(3.2)) -- 输出 4
(2) 极值常量
**(3) 随机数 math.random
**
- 伪随机:依赖种子(
math.randomseed
)生成序列。
- 三种调用方式:
math.random() -- [0, 1) 的浮点数
math.random(10) -- [1, 10] 的整数
math.random(5, 20) -- [5, 20] 的整数
- 设置种子(避免重复序列):
math.randomseed(os.time()) -- 用时间戳初始化种子
(4) 其他实用函数
2. os
库核心功能
(1) 时间处理
(2) 耗时计算
3. 关键概念对比
概念 |
32位(4字节) |
64位(8字节) |
整数范围 |
±2.1×10⁹ |
±9.2×10¹⁸ |
浮点数精度 |
~7 位有效数字 |
~15-16 位有效数字 |
内存寻址 |
最大 4GB |
理论 16EB(实际受系统限制) |
Lua 默认支持 |
❌(需手动模拟) |
✅(math.maxinteger 等) |
4. 常见问题解答
Q1: 为什么 math.maxinteger + 1
变成负数?
A: 64 位有符号整数溢出,最大值加 1 后符号位翻转,变成最小值。
Q2: 如何避免浮点数误差?
A:
- 使用整数运算(Lua 5.3+)。
- 控制小数位数:
local x = 0.1 + 0.2
print(string.format("%.2f", x)) -- 输出 "0.30"
Q3: 随机数如何更“真随机”?
A: 结合时间戳和 CPU 时间初始化种子:
math.randomseed(os.time() * os.clock())
5. 应用场景
- 游戏开发:随机掉落、技能范围计算(
math.pi * r²
)。
- 性能优化:用
os.clock()
检测代码耗时。
- 数据安全:避免整数溢出(如金币数量校验)。
掌握这些核心函数和原理,能高效解决大部分 Lua 数学和系统操作问题!