關於C 中的rand()的很蠢的bug

2021-07-02 04:01:24 字數 376 閱讀 9741

寫factor graphic model 的gibbs 抽樣的時候,一直糾結怎麼結果一直沒變,後來的經過是這樣的。

(1)偶然發現了為了生成u(0,1)分布的隨機變數,我居然這樣幹了:

int a = rand()/int_max;
(2)等我修改完之後:

int a = rand()/rand_max;   //rand_max 比int_max 小了好幾個數量級

我又發現了我在迴圈之中傳種子(時間),這也是不好的,因為兩次種子很相近,導致每次生成的隨機變數都很接近,這樣就不是均勻分布了!

(3)值得注意的是mod n 求餘的技巧 和 u(0,1)放大的異同。

C語言 關於rand 函式的使用

一 關於rand 首先我們須了解 rand 函式包含在中。rand 函式定義 int rand void rand 函式產生的隨機數範圍為0 0x7fff,即0 32767。事實上根據編譯器的不同範圍也會不同,但都為0 rand max 了解以上之後,我們試著產生10個偽隨機數。include in...

c 中的隨機函式rand()

一 c 中不能使用random 函式 random 函式不是ansi c標準,不能在gcc,vc等編譯器下編譯通過。但在c語言中int random num 可以這樣使用,它返回的是0至num 1的乙個隨機數。可改用c 下的rand函式來實現。1 c 標準函式庫提供一隨機數生成器rand,返回0 r...

C 中rand()函式的用法

c 標準函式庫提供一隨機數生成器rand,返回0 rand max之間均勻分布的偽隨機整數。rand max必須至少為32767。rand 函式不接受引數,預設以1為種子 即起始值 隨機數生成器總是以相同的種子開始,所以形成的偽隨機數列也相同,失去了隨機意義。但這樣便於程式除錯 如果你要產生0 10...