Надо кое-что добавить. Я сегодня таки сел и посчитал, и вышло, что для не очень даже и космических значений
![$p$ $p$](https://dxdy-03.korotkov.co.uk/f/2/e/c/2ec6e630f199f589a2402fdf3e0289d582.png)
значение
![$\log r/\log(1-p)$ $\log r/\log(1-p)$](https://dxdy-02.korotkov.co.uk/f/1/1/2/1120c522888f5d27cdc3003da690526182.png)
, где
![$r\sim U(0;1)$ $r\sim U(0;1)$](https://dxdy-04.korotkov.co.uk/f/7/6/c/76c9fa4eb840058b49e5a786163adc6182.png)
, уйдёт выше
![$2^{32}$ $2^{32}$](https://dxdy-04.korotkov.co.uk/f/f/c/1/fc1ad1e8be2d915908e89ee69245646d82.png)
. Для провала в 99% случаев достаточно
![$p<10^{-12}$ $p<10^{-12}$](https://dxdy-04.korotkov.co.uk/f/3/4/9/34925046bf3bf68090ee31a8074971b282.png)
, что, в принципе, может встретиться. Так что выкалывание нуля, выходит, не особо помогает — правильный подход всё-таки требует проверку, которой и случай передачи нуля покроется (ведь тогда логарифм должен выдать
![$-\infty$ $-\infty$](https://dxdy-02.korotkov.co.uk/f/1/d/5/1d5ba78bbbafd3226f371146bc34836382.png)
, при делении которой на отрицательное конечное число получится
![$+\infty$ $+\infty$](https://dxdy-04.korotkov.co.uk/f/7/0/1/701fa44621fd283e3f2c5468958859d882.png)
, которая ровно так же больше
![$2^{32}-1$ $2^{32}-1$](https://dxdy-01.korotkov.co.uk/f/0/6/5/0655edb7718fc6c851567bb64b8f186782.png)
или
![$2^{31}-1$ $2^{31}-1$](https://dxdy-01.korotkov.co.uk/f/4/4/a/44ad2a3323a1b776cd1486d4aac91a6c82.png)
, как и остальные «неудачные» результаты). Теперь предпочтение
1 - rand перед
rand для меня снова неясно.
-- Ср сен 02, 2015 22:44:55 --Ах да. Некоторые значения
![$p$ $p$](https://dxdy-03.korotkov.co.uk/f/2/e/c/2ec6e630f199f589a2402fdf3e0289d582.png)
, конечно, безобидны для любого ненулевого значения
![$r$ $r$](https://dxdy-01.korotkov.co.uk/f/8/9/f/89f2e0d2d24bcf44db73aab8fc03252c82.png)
, а именно, если
![$r$ $r$](https://dxdy-01.korotkov.co.uk/f/8/9/f/89f2e0d2d24bcf44db73aab8fc03252c82.png)
получено делением случайного uint32 на
![$2^{32}$ $2^{32}$](https://dxdy-04.korotkov.co.uk/f/f/c/1/fc1ad1e8be2d915908e89ee69245646d82.png)
, понятно, наименьшее такое значение будет равно
![$2^{-32}$ $2^{-32}$](https://dxdy-01.korotkov.co.uk/f/c/9/3/c9350237f1a5503f3ea8444a1fd41fd582.png)
, и наименьшее
![$p$ $p$](https://dxdy-03.korotkov.co.uk/f/2/e/c/2ec6e630f199f589a2402fdf3e0289d582.png)
, при котором мы при этом не вылезем за
![$2^{32}$ $2^{32}$](https://dxdy-04.korotkov.co.uk/f/f/c/1/fc1ad1e8be2d915908e89ee69245646d82.png)
, будет около
![$5\cdot10^{-9}$ $5\cdot10^{-9}$](https://dxdy-04.korotkov.co.uk/f/f/3/b/f3bacf741f1b1d0c89067c169ca3c14282.png)
— тоже вполне может попасться.
-- Ср сен 02, 2015 22:49:53 --С другой стороны, среднее значение величины с таким параметром распределения намекает на неприменимость uint32 в этом случае намного яснее, и особенно в страшных случаях из начала этого поста.