当前位置: 首页 > article >正文

【LuatOS】Lua与LuatOS中的Math.randomseed

【LuatOS】Lua与LuatOS中的Math.randomseed

    • 0x00 缘起
    • 0x01 环境
    • 0x02 实验
      • 测试代码
      • 实验方法
      • 实验结果
        • 1. 本地Lua环境实验结果
        • 2. 在线Lua环境实验结果
        • 3. 本地LuatOS环境实验结果
        • 4. 在线LuatOS实验结果
      • 实验总结
    • 0x03 结论
    • 0x04 资源
    • 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 环境

  • 操作系统:Windows 11 24H2;
  • 硬件参数:
    • CPU:Intel i7 9750H;
    • RAM: 32GB 2666Mhz;
  • 本地Lua环境: Lua 5.1.5;
  • 本地LuatOSPC模拟器:
    • LuatOS@PC base 24.10 bsp V1109 64bit;
    • Lua 5.3.6;
  • 在线Lua环境:
    • Lua 5.3;
    • https://www.jyshare.com/compile/66/;
  • 在线LuatOS环境:
    • Lua 5.3;
    • https://wiki.luatos.com/_static/luatos-emulator/lua.html;

0x02 实验

测试代码

-- 函数:生成指定数量的随机数
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环境实验结果
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环境实验结果
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环境实验结果
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实验结果
[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 后记

  • 己欲立而立人,己欲达而达人。

http://www.kler.cn/a/377803.html

相关文章:

  • Meta 上周宣布正式开源小型语言模型 MobileLLM 系列
  • ONLYOFFICE 8.2深度体验:高效协作与卓越性能的完美融合
  • 简单的 docker 部署ELK
  • 摩尔线程嵌入式面试题及参考答案(2万字长文)
  • MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附下载链接
  • 【docker】docker 环境配置及安装
  • word mathml 创建粗体字母快捷键
  • 【C】指针的基本知识点
  • Linux中SPI
  • 重学SpringBoot3-整合 Elasticsearch 8.x (一)客户端方式
  • 使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
  • 力扣题解(大礼包)
  • yarn 下载安装、下载依赖、通过 vscode 运行服务(Windows11)
  • 对于自带缓存的对象的注意点
  • 8. 数据结构——邻接表、邻接矩阵的基本操作
  • Elasticsearch Search Template 搜索模板
  • 代码随想录算法训练营第十五天| 654.最大二叉树 、617.合并二叉树 、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • AcWing 320 能量项链 状态压缩dp
  • 【C++刷题】力扣-#566-重塑矩阵
  • 前端八股文第四篇
  • WorkFlow源码剖析——Communicator之TCPServer(上)
  • Linux:编辑器Vim和Makefile
  • ResTful风格的Url
  • Mac如何实现高效且干净的卸载应用程序
  • Gateway解说
  • 目标追踪DeepSort