[問題] 迴圈內執行 srand() 兩次結果都一樣

看板C_and_CPP作者 (純情小處男)時間11年前 (2013/05/12 13:20), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) windows 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 當我在執行rand_table的迴圈時第一次的結果跟第二次結果完全一樣,不知道是為什麼 每次執行後有清除randan的資料在執行,是哪裡需要改嗎? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) void set_rand_table() { float Ur[11000], Vr[11000], nrand[11000]; srand(time(NULL)); for (int k = 0 ; k < 11000; k++){ Ur[k] = (float)rand()/RAND_MAX; Vr[k] = (float)rand()/RAND_MAX;} for (int k = 0 ; k < 11000; k++) nrand[k] = sqrt(-2.0f * log( Ur[k] )) * cosf( 6.283185307179586f * Vr[k]);// * 0.707106781186547f; //gaussian wave packet cudaMemcpyToSymbol(randtable, nrand, 44000, 0, cudaMemcpyHostToDevice); } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.255.234.23

05/12 14:12, , 1F
srand(time(NULL)) 在極近時間執行多次有機會取到相同的亂數
05/12 14:12, 1F

05/12 14:12, , 2F
你該做的是把 srand 拿到程式的一開始執行一次就好
05/12 14:12, 2F
文章代碼(AID): #1HZoQGJd (C_and_CPP)