我是使用
((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數取最小甚麼的...
謝謝
作者:
donkeychen (Bad_To_The_Bone)
2014-06-19 17:05:00do { } until { log(1/u) != -1 } 再取一次呢?看你的目的是不要0 而已..
嗯..我當初想說是0的話 就直接給他最小數比較簡單
那樣做的話機率會不均等(最小數的機率變高) 不如重骰
作者: Keiichi (Keiichi) 2014-06-19 17:31:00
(rand()+1.0)/(RAND_MAX+1.0)
std::uniform_real_distribution<double> unif(l, u);
可是我的想法是當它骰到0就是最小數 如果骰掉0又重骰就表示最小數的機率變低了
作者: HudsonE 2014-06-19 18:28:00
最小數本來就會骰到, 所以最小數的機率會變兩倍
作者:
iamnotgm (ä¼½è—之黑)
2014-06-19 19:19:00重骰就好了 你直接取最小數反而放大了最小數的機率
作者:
LPH66 (-6.2598534e+18f)
2014-06-19 19:53:00如果原 PO 還是沒轉過來的話, 想想骰個骰子但我不想要骰 1如果骰到 1 就當 2 那 2 的機率就是別人的兩倍正確的做法是骰到 1 重骰, 這樣才是平均的在這裡只是變成一個 RAND_MAX 面骰而已...