Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qfcy_
Python
提交
8babe928
P
Python
项目概览
qfcy_
/
Python
通知
114
Star
11
Fork
5
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Python
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8babe928
编写于
2月 15, 2024
作者:
qfcy_
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
上传生成随机数2.py
上级
1a4020c6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
59 addition
and
0 deletion
+59
-0
小项目/生成随机数2.py
小项目/生成随机数2.py
+59
-0
未找到文件。
小项目/生成随机数2.py
0 → 100644
浏览文件 @
8babe928
# 代码一部分来自于网络
import
math
import
matplotlib.pyplot
as
plt
class
MersenneTwister
:
def
__init__
(
self
,
seed
):
# seed的范围为-2147483648到2147483647
self
.
index
=
624
# 初始化索引
self
.
mt
=
[
0
]
*
624
# 初始化状态数组
self
.
mt
[
0
]
=
seed
# 使用种子初始化状态数组的第一个元素
for
i
in
range
(
1
,
624
):
# 初始化状态数组的其余元素
self
.
mt
[
i
]
=
0xFFFFFFFF
&
(
1812433253
*
(
self
.
mt
[
i
-
1
]
^
(
self
.
mt
[
i
-
1
]
>>
30
))
+
i
)
def
extract_number
(
self
):
if
self
.
index
>=
624
:
# 如果索引超出范围,进行扭曲操作
self
.
twist
()
y
=
self
.
mt
[
self
.
index
]
# 取出状态数组中的一个元素
y
=
y
^
(
y
>>
11
)
# 对取出的元素进行位运算
y
=
y
^
((
y
<<
7
)
&
0x9D2C5680
)
# 对取出的元素进行位运算
y
=
y
^
((
y
<<
15
)
&
0xEFC60000
)
# 对取出的元素进行位运算
y
=
y
^
(
y
>>
18
)
# 对取出的元素进行位运算
self
.
index
+=
1
# 更新索引
return
0xFFFFFFFF
&
y
# 返回生成的随机数
def
random
(
self
):
# 返回0-1的随机数
return
self
.
extract_number
()
/
0xFFFFFFFF
def
twist
(
self
):
for
i
in
range
(
624
):
# 扭曲操作
y
=
(
self
.
mt
[
i
]
&
0x80000000
)
+
(
self
.
mt
[(
i
+
1
)
%
624
]
&
0x7fffffff
)
self
.
mt
[
i
]
=
self
.
mt
[(
i
+
397
)
%
624
]
^
(
y
>>
1
)
if
y
%
2
!=
0
:
self
.
mt
[
i
]
=
self
.
mt
[
i
]
^
0x9908B0DF
self
.
index
=
0
# 重置索引
def
count
(
lst
,
max_value
,
d
):
# 统计lst中每个范围内数值的出现次数,d为组距
result
=
[
0
]
*
math
.
ceil
(
max_value
/
d
)
# ceil为向上取整
for
i
in
lst
:
result
[
int
(
i
//
d
)]
+=
1
return
result
def
main
():
plt
.
rcParams
[
'font.sans-serif'
]
=
[
'SimHei'
]
# 用于正常显示中文
seed
=
5489
# 设置随机数种子
mt
=
MersenneTwister
(
seed
)
lst
=
[];
cnt
=
10000
for
i
in
range
(
cnt
):
lst
.
append
(
mt
.
random
())
lst
=
count
(
lst
,
1
,
0.001
)
plt
.
bar
(
range
(
len
(
lst
)),
lst
)
plt
.
title
(
"梅森旋转算法"
)
plt
.
show
()
if
__name__
==
"__main__"
:
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录