加载中...

10.5 随机数


大多数计算机程序在执行的时候做着同样的事情,所以它们被称作确定性的。通常,确定性是一个好处,我们都期望计算产生相同的结果。例如某些程序,我们却希望计算机不准确。游戏是一个显著的例子。

写一个真的不确定的程序似乎没那么容易,但是有些许方法至少可以产生看起来比较不确定的结果。其中一个就是生成伪随机数来决定程序的输出。伪随机数不是真正数学意义上的随机,但我们为了达到目的,我们必须这么做。

C++提供一个函数叫做random用于生成随机数。它被声明是stdlib.h头文件中,这个文件包含了各种各样的“标准库”函数,所以取了这个名字。

从random返回是值是一个在0到RAND_MAX之间的整型数,RAND_MAX是一个非常大的数字(在我的计算机里大约是20亿)当然,它也是定义在头文件中。你每一次调用random时,你都会得到一个不同的随机生产的数值。看下面的一个例子,运行在一个循环中:

for (int i = 0; i < 4; i++) {
    int x = random ();
    cout << x << endl;
}

在我在我的机器上得到以下的输出:

   1804289383
   846930886
   1681692777
   1714636915

你可能会得到一些类似,但在你的计算机上是会得到不同的结果。

当然,我们不希望得到一个巨大的整型数。更多的情况我们想生成一个从0到我们所规定的上限值之间的整型数。一个简单的方法就是使用求模运算。例如:

int x = random ();
int y = x % upperBound;

y是x对upperBound求模余数,y的值只能是在0到upperBound-1之间,包括两端的值。记住,y无论怎样都不会等于upperBound。

它通常也频繁用作生成随机浮点数。一个常见的方法是出于RAND_MAX。例如:

int x = random ();
double y = double(x) / RAND_MAX;

这些代码将使y的随机值在0.0到1.0之间,包括两端的值。作为一个练习,你可能会思考如何生成一个随机浮点数在给定的范围中。例如在100.0到200.0之间。


还没有评论.