看板 C_and_CPP 關於我們 聯絡資訊
#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
MOONRAKER:為啥不用 % ?這方法好迂迴喔 05/16 00:36
sosokill:a%10+11這樣不是很簡單= =? 05/16 01:06
HeyScng:time函數回從午夜00:00:00起所經過秒數 05/16 01:48
HeyScng:因此若要有0.5的變化需耗時 0.5 x ( RAND_MAX+1 )/10秒 05/16 01:49
HeyScng:你現在如果再跑一次 應該有變一點點吧XD 05/16 01:50
HeyScng:不知道我有沒有說錯? 05/16 01:53
ykjiang:sosokill 的寫法,產生的亂數很容易就不平均 05/16 01:56
ykjiang:理由有二,讓其他人補充吧,要睡了... 05/16 01:56
jlovet:time不是從1970開始的秒數嗎? 又,秒數跟RAND_MAX的關係? 05/16 02:48
jlovet:只有 %10 而已應該不會太不平均... 05/16 02:55
Fenikso:這code跑起來一點問題都沒有啊 05/16 06:43
chin2049:樓上大大 為什麼我用Dev-c++跑 每次結果都一樣  05/16 06:47
MOONRAKER:%10+11是會怎樣不平均我倒想知道,yk先生的虛擬亂數值域 05/16 11:22
MOONRAKER:是只有0..15嗎? 05/16 11:22
ykjiang:學生交交作業沒差,最好不要用於嚴謹的場合 05/16 12:27
VictorTom:小弟資質駑鈍, 看不出這樣的寫法和%10+11有什麼差別. 05/16 12:33
VictorTom:把rand()的值域展開來看套下去原po式子算感覺是一樣的. 05/16 12:34
ykjiang:最主要原因,請參考 http://tinyurl.com/px9ep7 05/16 12:34
ykjiang:另一個原因,jlovet 應該知道 :) 05/16 12:35
VictorTom:亂數範圍是2, 4, 8, 16, 32這種用low-bits好像還OK.... 05/16 12:37
VictorTom:話說新的這個方法前N-1個分布是比較平均, 但最後一個落 05/16 12:38
VictorTom:點的機率會比前面N-1個都小一點囉?? 05/16 12:39
ykjiang:pseudo random number 很少有每個 bit 都一樣亂的 05/16 12:40
ykjiang:這是很現實問題 05/16 12:41
VictorTom:以前想過, 如果數學上某一小部份的數比另一大部份的數基 05/16 12:44
VictorTom:率不相同, 那取到這小部份的數就捨棄掉重取, 不知可不可 05/16 12:44
VictorTom:行....XD 05/16 12:45
ykjiang:這樣有作弊的嫌疑,很難弄得好 05/16 12:49
VictorTom:這倒是, 我要算0~N的亂數, 還得先找個>N的M, 確定M裡至 05/16 12:54
VictorTom:少有N個數的rand()機率相等, 然後去求; 想到就累了Orz 05/16 12:55
jlovet:我只知道,現在libc的rand是跟random一樣 05/16 13:30
jlovet:period很大,所以lower bit跟higher bit幾乎一樣亂... 05/16 13:30
ykjiang:那麼有信心,哪個版本的 libc? 用哪種演算法? 05/16 15:27
ykjiang:如果你測試過,覺得夠亂那就好,但並非每種場合都適用 05/16 15:28
ykjiang:夠亂不只是夠平均就好喔,要沒明顯的模式或相依性 05/16 15:29
ykjiang:這在統計上,有明確的定義... 05/16 15:30
ykjiang:一個嚴謹的要求是要任意長度的隨機序列出現的頻率都要一致 05/16 15:34
ykjiang:任何嚴謹隨機數應用,最好都測試過,看是否達到需求 05/16 15:37
ykjiang:我知道的,很少有演算法產生的隨機數能通過全部檢定的 05/16 15:38
ykjiang:通過全部檢定的演算法通常不實用,因為太耗運算了 05/16 15:41