我是使用
((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 面骰而已...