[問題] 產生0~1之間 不包含0有小數點的亂數

看板C_and_CPP (C/C++)作者 (幻滅)時間11年前 (2014/06/19 16:55), 編輯推噓5(5011)
留言16則, 7人參與, 最新討論串1/1
我是使用 ((double)rand()/RAND_MAX ) 來產生0~1之間有含小數點的均勻分布數 可是最近弄一個東西需要log(1/u) u是 0~1之間有含小數點的均勻分布數 可是這樣會導致當u=0的時候 log(1/g)會出現-1.#inf 所以我想知道C++大於0的最小數是多少 讓當u=0時可以加上那個最小數 因為我GOOGLE C++ 跟最小值 會出現一堆 XXX數取最小甚麼的... 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.240.236.116 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1403168152.A.247.html

06/19 17:05, , 1F
do { } until { log(1/u) != -1 } 再取一次呢?
06/19 17:05, 1F

06/19 17:06, , 2F
看你的目的是不要0 而已..
06/19 17:06, 2F

06/19 17:21, , 3F
嗯..我當初想說是0的話 就直接給他最小數比較簡單
06/19 17:21, 3F

06/19 17:25, , 4F
那樣做的話機率會不均等(最小數的機率變高) 不如重骰
06/19 17:25, 4F

06/19 17:31, , 5F
(rand()+1.0)/(RAND_MAX+1.0)
06/19 17:31, 5F

06/19 17:54, , 6F
std::uniform_real_distribution<double> unif(l, u);
06/19 17:54, 6F

06/19 17:56, , 7F
可是我的想法是當它骰到0就是最小數 如果骰掉0又重骰
06/19 17:56, 7F

06/19 17:57, , 8F
就表示最小數的機率變低了
06/19 17:57, 8F

06/19 18:02, , 9F
不取0的意思而已
06/19 18:02, 9F

06/19 18:28, , 10F
最小數本來就會骰到, 所以最小數的機率會變兩倍
06/19 18:28, 10F

06/19 19:19, , 11F
重骰就好了 你直接取最小數反而放大了最小數的機率
06/19 19:19, 11F

06/19 19:53, , 12F
如果原 PO 還是沒轉過來的話, 想想骰個骰子但我不想要骰 1
06/19 19:53, 12F

06/19 19:53, , 13F
如果骰到 1 就當 2 那 2 的機率就是別人的兩倍
06/19 19:53, 13F

06/19 19:53, , 14F
正確的做法是骰到 1 重骰, 這樣才是平均的
06/19 19:53, 14F

06/19 19:54, , 15F
在這裡只是變成一個 RAND_MAX 面骰而已...
06/19 19:54, 15F

06/19 20:36, , 16F
嗯..似乎是這樣 那我之前的想法搞錯了 謝指教
06/19 20:36, 16F
文章代碼(AID): #1JegMO97 (C_and_CPP)
文章代碼(AID): #1JegMO97 (C_and_CPP)