【LuatOS】Lua与LuatOS中的Math.randomseed

【LuatOS】Lua与LuatOS中的Math.randomseed

    • [0x00 缘起](#0x00 缘起)
    • [0x01 环境](#0x01 环境)
    • [0x02 实验](#0x02 实验)
      • 测试代码
      • 实验方法
      • 实验结果
        • [1. 本地Lua环境实验结果](#1. 本地Lua环境实验结果)
        • [2. 在线Lua环境实验结果](#2. 在线Lua环境实验结果)
        • [3. 本地LuatOS环境实验结果](#3. 本地LuatOS环境实验结果)
        • [4. 在线LuatOS实验结果](#4. 在线LuatOS实验结果)
      • 实验总结
    • [0x03 结论](#0x03 结论)
    • [0x04 资源](#0x04 资源)
    • [0x05 后记](#0x05 后记)

0x00 缘起

在Lua或者LuatOS虚拟机中,可以使用math.randomseed()进行置随机数种子,然后使用math.random()生成随机数。那么存在以下操作:

  1. math.randomseed(5).
  2. 使用math.random()生成 n n n个随机数,组成序列 S 1 S_1 S1.
  3. 再次math.randomseed(5).
  4. 使用math.random()生成 n n n个随机数,组成序列 S 2 S_2 S2.
  5. 比较 S 1 S_1 S1 是否等于 S 2 S_2 S2.

上述操作主要测试使用相同的随机数种子进行math.randomseed()后,是否能够重置随机序列的生成。

0x01 环境

0x02 实验

测试代码

lua 复制代码
-- 函数:生成指定数量的随机数
print(_VERSION)

local function generate_random_numbers(seed, count)
    math.randomseed(seed)  -- 设置随机种子
    local numbers = {}
    for i = 1, count do
        table.insert(numbers, math.random())  -- 生成随机数并存入表中
    end
    return numbers
end

-- 设置随机种子和生成数量
local seed = 5
local count = 5

-- 生成两个随机数序列
local s1 = generate_random_numbers(seed, count)
local s2 = generate_random_numbers(seed, count)

-- 输出结果
print("s1:", table.concat(s1, ", "))
print("s2:", table.concat(s2, ", "))

-- 比较两个序列是否相等
local equal = true
for i = 1, count do
    if s1[i] ~= s2[i] then
        equal = false
        break
    end
end

-- 输出比较结果
if equal then
    print("s1 equal s2")
else
    print("s1 not equal s2 !")
end

实验方法

在本地Lua环境、在线Lua环境、本地LuatOS环境、在线LuatOS环境中分别执行2次"实验代码",并分析输出结果。

实验结果

1. 本地Lua环境实验结果
bash 复制代码
PS D:\Users\admin\Desktop> lua .\main.lua
Lua 5.1
s1:     0.0016479995117038, 0.87566759239479, 0.37400433362835, 0.74614703817866, 0.84414197210608
s2:     0.0016479995117038, 0.87566759239479, 0.37400433362835, 0.74614703817866, 0.84414197210608
s1 equal s2

PS D:\Users\admin\Desktop> lua .\main.lua
Lua 5.1
s1:     0.0016479995117038, 0.87566759239479, 0.37400433362835, 0.74614703817866, 0.84414197210608
s2:     0.0016479995117038, 0.87566759239479, 0.37400433362835, 0.74614703817866, 0.84414197210608
s1 equal s2
PS D:\Users\admin\Desktop>
2. 在线Lua环境实验结果
bash 复制代码
Lua 5.3
s1:	0.046467764768749, 0.99275522399694, 0.08003044500947, 0.14768879674375, 0.079644672572613
s2:	0.046467764768749, 0.99275522399694, 0.08003044500947, 0.14768879674375, 0.079644672572613
s1 equal s2

Lua 5.3
s1:	0.046467764768749, 0.99275522399694, 0.08003044500947, 0.14768879674375, 0.079644672572613
s2:	0.046467764768749, 0.99275522399694, 0.08003044500947, 0.14768879674375, 0.079644672572613
s1 equal s2
3. 本地LuatOS环境实验结果
bash 复制代码
PS D:\Users\admin\Desktop> &"D:\LuatOSeMulator\luatos.exe" D:\Users\admin\Desktop\main.lua
[00000000.002]E/uart uart library initial error!
[00000000.002]I/main LuatOS@PC base 24.10 bsp V1109 64bit
[00000000.002]I/main ROM Build: Oct 30 2024 14:11:01
[00000000.003]D/main loadlibs luavm 1048568 16920 16920
[00000000.003]D/main loadlibs sys   251904 131072 65536
[00000000.003]D/fs fopen main.luac rb
[00000000.003]D/fs fopen main.lua rb
[00000000.003]D/fs fopen main.lua rb
Lua 5.3
s1:     0.12750244100000, 0.30233764600000, 0.73547363300000, 0.14608764600000, 0.024383545000000
s2:     0.65908813500000, 0.10214233400000, 0.20410156200000, 0.57086181600000, 0.62246704100000
s1 not equal s2 !
[00000000.004]E/main Lua VM exit!! reboot in 15000ms

PS D:\Users\admin\Desktop> &"D:\LuatOSeMulator\luatos.exe" D:\Users\admin\Desktop\main.lua
[00000000.001]E/uart uart library initial error!
[00000000.002]I/main LuatOS@PC base 24.10 bsp V1109 64bit
[00000000.002]I/main ROM Build: Oct 30 2024 14:11:01
[00000000.002]D/main loadlibs luavm 1048568 16920 16920
[00000000.002]D/main loadlibs sys   251904 131072 65536
[00000000.002]D/fs fopen main.luac rb
[00000000.002]D/fs fopen main.lua rb
[00000000.002]D/fs fopen main.lua rb
Lua 5.3
s1:     0.12750244100000, 0.30233764600000, 0.73547363300000, 0.14608764600000, 0.024383545000000
s2:     0.65908813500000, 0.10214233400000, 0.20410156200000, 0.57086181600000, 0.62246704100000
s1 not equal s2 !
[00000000.003]E/main Lua VM exit!! reboot in 15000ms
PS D:\Users\sen79\Desktop>
4. 在线LuatOS实验结果
bash 复制代码
[14:12:06] 虚拟机初始化完毕
[14:12:06] Lua 5.3
[14:12:06] s1:	0.25809025764465, 0.89685845375061, 0.32093167304993, 0.81395554542542, 0.12924122810364
[14:12:06] s2:	0.25809025764465, 0.89685845375061, 0.32093167304993, 0.81395554542542, 0.12924122810364
[14:12:06] s1 equal s2
[14:12:06] 虚拟机已停止运行

[14:12:23] 虚拟机初始化完毕
[14:12:23] Lua 5.3
[14:12:23] s1:	0.25809025764465, 0.89685845375061, 0.32093167304993, 0.81395554542542, 0.12924122810364
[14:12:23] s2:	0.25809025764465, 0.89685845375061, 0.32093167304993, 0.81395554542542, 0.12924122810364
[14:12:23] s1 equal s2
[14:12:23] 虚拟机已停止运行

实验总结

统计上述实验结果,形成以下表格:

运行环境 S1=S2 两次运行结果相同
本地Lua
在线Lua
本地LuatOS
在线LuatOS

除本地LuatOS环境 S 1 ≠ S 2 S1≠S2 S1=S2 外,其余环境均 S 1 = S 2 S1=S2 S1=S2 ,所有运行环境两次运行结果均相同。

0x03 结论

在本地Lua环境、在线Lua环境、本地LuatOS环境、在线LuatOS环境4个Lua运行环境中,执行两次"实验代码"以测试math.randomseed()的表现。实验结果表明,在本地LuatOS环境中math.randomseed()不能够重置math.random()的随机数生成序列,本地Lua环境、在线Lua环境、在线LuatOS环境3个环境中,math.randomseed()均能够重置math.random()的随机数生成序列。

0x04 资源

  1. Lua 5.3 在线环境
  2. LuatOS 在线体验

0x05 后记

  • 己欲立而立人,己欲达而达人。
相关推荐
老狼孩1112210 小时前
2025新版懒人精灵零基础及各板块核心系统视频教程-全分辨率免ROOT自动化开发
android·机器人·自动化·lua·脚本开发·懒人精灵·免root开发
珠峰下的沙砾17 小时前
如何在 Postman 中,自动获取 Token 并将其赋值到环境变量
测试工具·lua·postman
时光话1 天前
Lua 第9部分 闭包
开发语言·lua
时光话1 天前
Lua 第7部分 输入输出
开发语言·lua
Hy行者勇哥3 天前
使用Postman调测“获取IAM用户Token”接口实际操作
测试工具·lua·postman
加油,旭杏5 天前
【Lua语言】Lua语言快速入门
开发语言·lua
徐同保5 天前
fetch使用put请求提交文件,postman使用put请求提交文件
测试工具·lua·postman
码到成功>_<8 天前
postman使用技巧
测试工具·lua·postman
King.6249 天前
SQL2API 核心理念:如何重构数据服务交付范式
大数据·开发语言·数据库·人工智能·sql·lua
maizeman12610 天前
R语言——分布和公式
开发语言·r语言·公式·随机数·分布