Game Design
数学、物理、图形学、汇编/C/C++数据结构与算法、windows程序设计
C++博客
首页
新随笔
联系
聚合
管理
随笔-11 评论-20 文章-0 trackbacks-0
生成随机数的一个工具类
1
#include
<
iostream
>
2
#include
<
time.h
>
3
4
using
namespace
std;
5
6
//
generate random numbers
7
class
randomNumber
8
{
9
public
:
10
//
initialize the random number generator
11
randomNumber(
long
s
=
0
);
12
13
//
return a 32-bit random integer m, 1 <= m <= 2^31-2
14
long
random();
15
16
//
return a 32-bit random integer m, 0 <= m <= n-1,
17
//
where n <= 2^31-1
18
long
random(
long
n);
19
20
//
return a real number x, 0 <= x < 1
21
double
frandom();
22
23
private
:
24
static
const
long
A;
25
static
const
long
M;
26
static
const
long
Q;
27
static
const
long
R;
28
29
long
seed;
30
}
;
31
32
const
long
randomNumber::A
=
48271
;
33
const
long
randomNumber::M
=
2147483647
;
34
const
long
randomNumber::Q
=
M
/
A;
35
const
long
randomNumber::R
=
M
%
A;
36
37
randomNumber::randomNumber(
long
s)
38
{
39
if
(s
<
0
)
40
s
=
0
;
41
42
if
(s
==
0
)
43
{
44
//
get time of day in seconds since 12:00 AM,
45
//
January 1, 1970
46
long
t_time
=
time(NULL);
47
48
//
mix-up bits by squaring
49
t_time
*=
t_time;
50
//
result can overflow. handle cases
51
//
> 0, < 0, = 0
52
if
(t_time
>
0
)
53
s
=
t_time
^
0x5EECE66DL
;
54
else
if
(t_time
<
0
)
55
s
=
(t_time
&
0x7fffffff
)
^
0x5EECE66DL
;
56
else
57
s
=
0x5EECE66DL
;
58
}
59
60
seed
=
s;
61
}
62
63
long
randomNumber::random()
64
{
65
long
tmpSeed
=
A
*
( seed
%
Q )
-
R
*
( seed
/
Q );
66
67
if
( tmpSeed
>=
0
)
68
seed
=
tmpSeed;
69
else
70
seed
=
tmpSeed
+
M;
71
72
return
seed;
73
}
74
75
long
randomNumber::random(
long
n)
76
{
77
double
fraction
=
double
(random())
/
double
(M);
78
79
return
int
(fraction
*
n);
80
}
81
82
double
randomNumber::frandom()
83
{
84
return
double
(random())
/
double
(M);
85
}
86
posted on 2009-08-24 19:35
diwayou
阅读(1931)
评论(1)
编辑
收藏
引用
所属分类:
数据结构与算法
评论:
#
re: 生成随机数的一个工具类
2011-04-05 18:12 |
shilei230
能否解释下什么原理不?这里的魔数真不少
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
各种排序算法性能测试结果
简单的测试各种排序算法的性能
一个简单的计算程序运行时间的工具类
计算以t为根的子树的结点个数
生成随机数的一个工具类
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2009年9月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
(10)
Real-Time Rendering_3rd
windows程序设计(1)
生活(2)
数据结构与算法(5)
数学(1)
图形学
物理
游戏(1)
随笔档案
(11)
2009年9月 (3)
2009年8月 (8)
相册
宇多田光
搜索
积分与排名
积分 - 15149
排名 - 959
最新评论
1. re: 生成随机数的一个工具类
能否解释下什么原理不?这里的魔数真不少
--shilei230
2. re: 让我们这些中国二流大学的学生也听听世界一流大学的计算机课程(转)
太好了,多谢博主!
--邓强
3. re: 让我们这些中国二流大学的学生也听听世界一流大学的计算机课程(转)
是的师傅是大方
--罗莱家纺
4. re: 让我们这些中国二流大学的学生也听听世界一流大学的计算机课程(转)
不错~分享了
--乐蜂网
5. re: 让我们这些中国二流大学的学生也听听世界一流大学的计算机课程(转)
牛
--李佳
阅读排行榜
1. 让我们这些中国二流大学的学生也听听世界一流大学的计算机课程(转)(4545)
2. 各种排序算法性能测试结果(2143)
3. 生成随机数的一个工具类(1931)
4. 简单的测试各种排序算法的性能(1731)
5. 计算幻方(1471)
评论排行榜
1. 让我们这些中国二流大学的学生也听听世界一流大学的计算机课程(转)(9)
2. 简单的测试各种排序算法的性能(4)
3. 各种排序算法性能测试结果(2)
4. 暴雪CEO解读吸引全球千万玩家的商业秘密(2)
5. 生成随机数的一个工具类(1)
6. 以后不能逃课了(1)
7. 计算幻方(1)
8. 计算以t为根的子树的结点个数(0)
9. 一个简单的计算程序运行时间的工具类(0)
10. erroe C2471解决办法(0)
11. 2009年9月语言排行榜:PHP超越C++(转自CSDN:我钟爱的C++和python啊)(0)