關於C語言的隨機函式的一點思考

2022-03-06 18:12:54 字數 707 閱讀 6564

今天在看書的過程遇到乙個問題,大致描述如下:

編寫乙個函式,通過返回範圍1至6的隨機整數來模擬擲篩子。同時,這個題目要求這個6個數字出現的概率是相等的。

首先,對於這個問題的基本思路如下:

首先,用srand函式對隨機數發生器進行初始化。

其次,迴圈呼叫rand函式六次,對每一次呼叫的結果與6取模,然後再加1,就可以得到我們想要的六個隨機數。

由於rand函式返回的是乙個範圍在0到rand_max的偽隨機數。在我所使用的機器上,rand_max的取值是32767.

任何乙個整數在與6取模之後的餘數有六種的可能的值:0、1、2、3、4、5.

在範圍0到rand_max內,上述六種餘數出現的次數分別為:

0:5462

1:5462

2:5461

3:5461

4:5461

5:5461

很顯然,這個六個餘數在該範圍內出現的概率必然不想等。因而,擲出的六個整數也不是等概率的。

但是,當把範圍限定在0到32765之間的時候,上述六個餘數出現的次數均為5461。因此,只有在這個範圍內得到的六個隨機數才是等概率的。

到此,我的問題基本是解決了。

但是,這種問題有沒有什麼規律呢?

那麼,如果下次我想產生範圍在1到30000之間的隨機數,那麼每個數出現的概率是否相等。

如果不相等,那麼我該怎麼限定範圍,來讓每個整數出現的概率相等呢?

關於C語言結構體偏移的一點思考

相信大家在c語言程式開發的過程一定都使用過結構體,那麼不知你對結構體中成員變數偏移這塊是如何理解的?本文將和大家一起分享下,本人最近關於c語言中結構體偏移的一些思考和總結。另外這篇博文還可以幫你更好的理解這個問題c語言中兩種巨集定義的區別,關於這個思考有哪些方面的意義,細心的你可能發現本文所屬的類別...

關於makefile的一點思考

在gnu編譯工具軟體中,如果對單一的原始檔進行編譯,可執行指令如下 gcc o x x.c 此指令會將原始檔編譯為目標檔案。若是對執行緒類檔案進行編譯,則在末尾加上 lpthread指令。但若是對多檔案進行編譯,即若是編譯的目標檔案同時包含另一檔案中的函式。則在編譯的時候需將另一檔案加到編譯原始檔中...

關於指標的一點思考

指標是乙個變數,所不同的是,它存的是位址。因為資料型別決定著如何解釋這個位址 位元組數和操作 因此根據的資料型別的不同,指標又有不同的型別。某個物件 a 的位址範圍為 a,a size n 其中size n是a所佔的位元組數 比如乙個一維陣列int a 10 位址範圍為 a,a 10 sizeof ...