[問題] 增進大量產生隨機數的效率

看板C_and_CPP作者 (Nick Lin)時間13年前 (2012/11/30 14:18), 編輯推噓3(304)
留言7則, 5人參與, 最新討論串1/1
我要寫一個程式作業,他的要求是這樣的: 第一步驟:先隨機產生一個0~9的整數,0的話得到d=0,1的話d=第二步驟的值*2 ,否則就是d=第二個步驟的值*1 第二步驟:產生一個1~6的值,配合第一步驟的整數值決定d值 問題來了: 當要產生的d值數量有非常多個(n個)時,rand次數=2n,我該如何著手      進一步做效率的優化? 原本的程式是以switch跟rand決定第一步驟的值,我已經寫成陣列去減少因為if-switch 造成的遲緩,我有想過是否只要產生出一次rand,配合mod 10跟mod 6 + 1來達成,但我 觀察結果後,有點懷疑是不是會造成亂數不夠亂的問題?想請各位提供一些觀點讓我自己 最佳化我的程式。 程式碼(已改部分):http://codepad.org/KIpEcMfI -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.224.173.192

11/30 15:16, , 1F
你就mod 60啊,然後第一步驟用個位數,第二步用十位
11/30 15:16, 1F

11/30 15:18, , 2F
不過stdlib的亂數都很爛啦
11/30 15:18, 2F

11/30 16:13, , 3F
應該改為%5+1,而不是%6+1
11/30 16:13, 3F

11/30 16:54, , 4F
不好意思, 我上面寫錯了, sorry
11/30 16:54, 4F

11/30 17:32, , 5F
有沒有想過用 bitwise 去做啊?"可能有機會" 比較快唷
11/30 17:32, 5F

11/30 18:05, , 6F
11/30 18:05, 6F

11/30 18:34, , 7F
推 kevin 的方法(Y)
11/30 18:34, 7F
文章代碼(AID): #1Gk4-Vhx (C_and_CPP)