codecamp

C++ 随机数

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

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

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之间。

C++ 向量的长度
C++ 统计
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }