合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
大多数计算机程序在执行的时候做着同样的事情,所以它们被称作确定性的。通常,确定性是一个好处,我们都期望计算产生相同的结果。例如某些程序,我们却希望计算机不准确。游戏是一个显著的例子。 写一个真的不确定的程序似乎没那么容易,但是有些许方法至少可以产生看起来比较不确定的结果。其中一个就是生成伪随机数来决定程序的输出。伪随机数不是真正数学意义上的随机,但我们为了达到目的,我们必须这么做。 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之间。