【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 后记

  • 己欲立而立人,己欲达而达人。
相关推荐
unix2linux18 小时前
YOLO v5 Series - Image & Video Storage ( Openresty + Lua)
yolo·lua·openresty
最后一个bug18 小时前
如何理解Lua 使用虚拟堆栈
linux·c语言·开发语言·嵌入式硬件·lua
半夏知半秋2 天前
lua-lru缓存算法解析
笔记·学习·算法·缓存·lua
最后一个bug3 天前
C语言执行Lua进行错误处理
linux·服务器·c语言·开发语言·嵌入式硬件·lua
袁庭新3 天前
Lua如何连接MySQL数据库?
redis·mysql·lua·lua5.4·袁庭新
红黑色的圣西罗3 天前
Lua 实现继承的一种方式
开发语言·lua
weixin_428498494 天前
Lua资料
开发语言·lua
Clown954 天前
go-zero(四) 错误处理(统一响应信息)
开发语言·golang·lua
半夏知半秋5 天前
lua实现雪花算法
开发语言·笔记·算法·lua
最后一个bug5 天前
lua调用C语言函数,在函数中进行类型检查
linux·c语言·开发语言·lua