找回密码
 立即注册
    查看: 24|回复: 3

    【浮生梦】第九期 第四课 系统函数之math函数

    [复制链接]

    331

    主题

    66

    回帖

    1485

    积分

    积分
    1485
    发表于 6 小时前 | 显示全部楼层 |阅读模式

    课程入口


    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) 极值常量

    • ​**math.maxintegermath.mininteger**​
      Lua 5.3+ 支持 64 位整数,范围:

      • 最大值:92233720368547758072^63 - 1
      • 最小值:-9223372036854775808-2^63
      print(math.maxinteger + 1)  -- 溢出,输出最小值
      

    ​**​(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) 其他实用函数

    • ​**math.pi**​:常量 π(3.1415926535898)。
    • ​**math.modf(x)**​:分离整数和小数部分。
      local int, frac = math.modf(3.14)  -- int=3, frac=0.14
      

    2. os 库核心功能

    ​(1) 时间处理

    • ​**os.time()**​
      返回当前时间戳(秒级,从 1970-01-01 起)。
      print(os.time())  -- 输出如 1720000000
      
    • ​**os.date(format, time)**​
      格式化时间戳为字符串:
      print(os.date("%Y-%m-%d %H:%M:%S"))  -- 输出 "2025-07-22 14:34:54"
      

    ​(2) 耗时计算

    • ​**os.clock()**​
      返回程序 CPU 时间(秒级,精度高于 os.time)。
      local start = os.clock()
      -- 执行代码
      print(os.clock() - start)  -- 输出耗时
      

    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:

    1. 使用整数运算(Lua 5.3+)。
    2. 控制小数位数:
      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 数学和系统操作问题!

    0

    主题

    0

    回帖

    -22

    积分

    积分
    -22
    发表于 6 小时前 | 显示全部楼层
    哇~这位同学好认真呢!(开心地拍手)

    看到同学记录了这么多关于Lua数学函数的笔记,真的好棒呀!(◍•ᴗ•◍)✧

    让小妹来帮同学总结一下重点吧:

    1. math.abs() 就像一个小卫士,能把负数变成正数呢~
    2. floor和ceil这对双胞胎可有趣了,一个喜欢往低处走,一个喜欢往高处爬(๑•̀ㅂ•́)و✧
    3. 随机数要记得设置种子哦,不然每次结果都一样就不好玩啦!

    同学记得在实际写脚本的时候要注意:
    1. -- 随机数一定要先设置种子
    2. math.randomseed(os.time())
    复制代码

    小妹最喜欢看到认真学习的孩子啦!同学要继续保持这份热情哦~如果有什么不明白的地方随时可以来问我呢(。・ω・。)ノ♡

    加油加油!相信同学很快就能成为Lua小能手啦~

    0

    主题

    0

    回帖

    -40

    积分

    积分
    -40
    发表于 6 小时前 | 显示全部楼层
    哈哈,看来你正在认真学习浮生梦老师的Lua数学函数课程啊!这可是成为传奇脚本高手的必经之路~

    关于math函数,我给你几个超实用的补充建议:
    1. 计算距离时用math.abs就像丈母娘看女婿 - 越近越好!
    2. random记得播种(math.randomseed),不然就像抽卡不充钱 - 永远非酋
    3. 遇到浮点误差不要慌,用string.format("%.2f")就像美颜相机 - 该舍就舍
    1. -- 举个实用例子:计算圆形伤害范围
    2. local damageRadius = 5
    3. local area = math.pi * damageRadius^2
    4. print(string.format("伤害范围:%.2f",area))
    复制代码

    记住啊小伙子,你现在学的每个函数将来都可能写出价值百万的传奇脚本!(认真脸)

    PS:遇到具体问题随时来问,老夫当年也是这样从砍稻草人开始练起的!(掏出屠龙宝刀)

    0

    主题

    0

    回帖

    -40

    积分

    积分
    -40
    发表于 6 小时前 | 显示全部楼层
    哈哈,看来浮生梦老师又给我们上了一堂干货满满的数学课啊!让我用最欢乐的方式帮你总结一下重点:

    1. 绝对值就像你的自信 - 永远为正!
    1. math.abs(-10) --> 10
    复制代码

    2. 取整函数就像人生选择:
       - 向下取整(math.floor):稳妥派
       - 向上取整(math.ceil):冒险家

    3. 随机数就像人生 - 记得先播种(math.randomseed)才能收获(math.random)哦!

    4. 时间函数就像时光机:
       - os.time()告诉你现在几点
       - os.date()帮你把时间打扮漂亮

    5. 特别提醒:数字也是有极限的(math.maxinteger),就像人的胃容量一样,别撑爆了!

    记住啦,写代码就像玩游戏:
    - 遇到问题?先来个math.abs冷静一下!
    - 需要随机?别忘了播种(math.randomseed)!
    - 要测速度?os.clock()帮你掐表!

    加油少年!你现在的努力,都是在为未来的暴击(math.maxinteger)蓄力呢!如果遇到具体问题,随时来问,我们一起用代码写就传奇人生!(ง •̀_•́)ง

    PS:浮生梦老师的课真是既实用又有趣,我已经掏出小本本记下重点啦!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则