作者chin2049 (香吉士)
看板C_and_CPP
標題[問題] 隨機亂數rand()的問題
時間Sat May 16 00:25:45 2009
#include<iostream>
#include<stdlib.h>
#include<ctime>
using namespace std;
int main(){
srand( static_cast<unsigned int>(time(NULL))); //隨機函式
int a = 11 + static_cast<int>( 1. * rand() * 10 / (RAND_MAX + 1.));
cout << a << endl;
system("pause");
return 0;
}
請教一下各位大大
我想要產生11~20的隨機亂數
但是為什麼執行結果都相同呢?
我是用深度學習C++自學
我是照書上打的
請問這個改良式的亂數產生方法哪裡錯了呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.118.232.173
1F:→ MOONRAKER:為啥不用 % ?這方法好迂迴喔 05/16 00:36
2F:→ sosokill:a%10+11這樣不是很簡單= =? 05/16 01:06
3F:→ HeyScng:time函數回從午夜00:00:00起所經過秒數 05/16 01:48
4F:→ HeyScng:因此若要有0.5的變化需耗時 0.5 x ( RAND_MAX+1 )/10秒 05/16 01:49
5F:→ HeyScng:你現在如果再跑一次 應該有變一點點吧XD 05/16 01:50
6F:→ HeyScng:不知道我有沒有說錯? 05/16 01:53
7F:→ ykjiang:sosokill 的寫法,產生的亂數很容易就不平均 05/16 01:56
8F:→ ykjiang:理由有二,讓其他人補充吧,要睡了... 05/16 01:56
9F:推 jlovet:time不是從1970開始的秒數嗎? 又,秒數跟RAND_MAX的關係? 05/16 02:48
10F:→ jlovet:只有 %10 而已應該不會太不平均... 05/16 02:55
11F:推 Fenikso:這code跑起來一點問題都沒有啊 05/16 06:43
12F:→ chin2049:樓上大大 為什麼我用Dev-c++跑 每次結果都一樣 05/16 06:47
13F:→ MOONRAKER:%10+11是會怎樣不平均我倒想知道,yk先生的虛擬亂數值域 05/16 11:22
14F:→ MOONRAKER:是只有0..15嗎? 05/16 11:22
15F:→ ykjiang:學生交交作業沒差,最好不要用於嚴謹的場合 05/16 12:27
16F:推 VictorTom:小弟資質駑鈍, 看不出這樣的寫法和%10+11有什麼差別. 05/16 12:33
17F:→ VictorTom:把rand()的值域展開來看套下去原po式子算感覺是一樣的. 05/16 12:34
19F:→ ykjiang:另一個原因,jlovet 應該知道 :) 05/16 12:35
20F:推 VictorTom:亂數範圍是2, 4, 8, 16, 32這種用low-bits好像還OK.... 05/16 12:37
21F:→ VictorTom:話說新的這個方法前N-1個分布是比較平均, 但最後一個落 05/16 12:38
22F:→ VictorTom:點的機率會比前面N-1個都小一點囉?? 05/16 12:39
23F:→ ykjiang:pseudo random number 很少有每個 bit 都一樣亂的 05/16 12:40
24F:→ ykjiang:這是很現實問題 05/16 12:41
25F:推 VictorTom:以前想過, 如果數學上某一小部份的數比另一大部份的數基 05/16 12:44
26F:→ VictorTom:率不相同, 那取到這小部份的數就捨棄掉重取, 不知可不可 05/16 12:44
27F:→ VictorTom:行....XD 05/16 12:45
28F:→ ykjiang:這樣有作弊的嫌疑,很難弄得好 05/16 12:49
29F:推 VictorTom:這倒是, 我要算0~N的亂數, 還得先找個>N的M, 確定M裡至 05/16 12:54
30F:→ VictorTom:少有N個數的rand()機率相等, 然後去求; 想到就累了Orz 05/16 12:55
31F:→ jlovet:我只知道,現在libc的rand是跟random一樣 05/16 13:30
32F:→ jlovet:period很大,所以lower bit跟higher bit幾乎一樣亂... 05/16 13:30
33F:推 ykjiang:那麼有信心,哪個版本的 libc? 用哪種演算法? 05/16 15:27
34F:→ ykjiang:如果你測試過,覺得夠亂那就好,但並非每種場合都適用 05/16 15:28
35F:→ ykjiang:夠亂不只是夠平均就好喔,要沒明顯的模式或相依性 05/16 15:29
36F:→ ykjiang:這在統計上,有明確的定義... 05/16 15:30
37F:→ ykjiang:一個嚴謹的要求是要任意長度的隨機序列出現的頻率都要一致 05/16 15:34
38F:→ ykjiang:任何嚴謹隨機數應用,最好都測試過,看是否達到需求 05/16 15:37
39F:→ ykjiang:我知道的,很少有演算法產生的隨機數能通過全部檢定的 05/16 15:38
40F:→ ykjiang:通過全部檢定的演算法通常不實用,因為太耗運算了 05/16 15:41