C++ 隨機(jī)數(shù)

2023-03-20 16:02 更新

大多數(shù)計(jì)算機(jī)程序在執(zhí)行的時(shí)候做著同樣的事情,所以它們被稱(chēng)作確定性的。通常,確定性是一個(gè)好處,我們都期望計(jì)算產(chǎn)生相同的結(jié)果。例如某些程序,我們卻希望計(jì)算機(jī)不準(zhǔn)確。游戲是一個(gè)顯著的例子。

寫(xiě)一個(gè)真的不確定的程序似乎沒(méi)那么容易,但是有些許方法至少可以產(chǎn)生看起來(lái)比較不確定的結(jié)果。其中一個(gè)就是生成偽隨機(jī)數(shù)來(lái)決定程序的輸出。偽隨機(jī)數(shù)不是真正數(shù)學(xué)意義上的隨機(jī),但我們?yōu)榱诉_(dá)到目的,我們必須這么做。

C++提供一個(gè)函數(shù)叫做random用于生成隨機(jī)數(shù)。它被聲明是stdlib.h頭文件中,這個(gè)文件包含了各種各樣的“標(biāo)準(zhǔn)庫(kù)”函數(shù),所以取了這個(gè)名字。

從random返回是值是一個(gè)在0到RAND_MAX之間的整型數(shù),RAND_MAX是一個(gè)非常大的數(shù)字(在我的計(jì)算機(jī)里大約是20億)當(dāng)然,它也是定義在頭文件中。你每一次調(diào)用random時(shí),你都會(huì)得到一個(gè)不同的隨機(jī)生產(chǎn)的數(shù)值??聪旅娴囊粋€(gè)例子,運(yùn)行在一個(gè)循環(huán)中:

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

在我在我的機(jī)器上得到以下的輸出:

   1804289383
   846930886
   1681692777
   1714636915

你可能會(huì)得到一些類(lèi)似,但在你的計(jì)算機(jī)上是會(huì)得到不同的結(jié)果。

當(dāng)然,我們不希望得到一個(gè)巨大的整型數(shù)。更多的情況我們想生成一個(gè)從0到我們所規(guī)定的上限值之間的整型數(shù)。一個(gè)簡(jiǎn)單的方法就是使用求模運(yùn)算。例如:

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

y是x對(duì)upperBound求模余數(shù),y的值只能是在0到upperBound-1之間,包括兩端的值。記住,y無(wú)論怎樣都不會(huì)等于upperBound。

它通常也頻繁用作生成隨機(jī)浮點(diǎn)數(shù)。一個(gè)常見(jiàn)的方法是出于RAND_MAX。例如:

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

這些代碼將使y的隨機(jī)值在0.0到1.0之間,包括兩端的值。作為一個(gè)練習(xí),你可能會(huì)思考如何生成一個(gè)隨機(jī)浮點(diǎn)數(shù)在給定的范圍中。例如在100.0到200.0之間。

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)