Re: random numbers

"Mark J. Reed" <[email protected]>
Newsgroups gmane.comp.shells.zsh.user
Message-ID <CAA=-s3ygFB7jw+7i9YM35tK_1OSqbFKGVv2g6ut72Z-Z7-uYcA@mail.gmail.com>
Sure.  More generally, you can get a pseudo-random integer from 0 to N-1 by
rerolling whenever you get anything > N*floor(32767/N). My point was that
even if you don't do that, the actual variation from uniformity is not huge
as long as you keep your divisor in a reasonable range relative to 32767.

On Mon, Sep 15, 2025 at 3:12 PM Roman Perepelitsa <
[email protected]> wrote:

> You can get a uniform random number from [0, 10) like this:
>
>     integer n
>     while true; do
>       (( n = RANDOM ))
>       if (( n <= 32760 )); then
>         (( n %= 10 ))
>         break
>       fi
>     done
>
> Roman
>
> On Mon, Sep 15, 2025 at 8:56 PM Mark J. Reed <[email protected]> wrote:
>
>> > I think i know why, it's because zsh's RANDOM tops out at 32,767, but
>> this insures that the first digit of a string of random numbers isn't
>> random but strongly weighted to 1 and 2, with 3 also weighted.
>>
>> I mean, only if you use the whole value of RANDOM directly, which most
>> applications of random numbers don't do. If you do the usual trick of
>> taking the remainder of RANDOM modulo a range, e.g. picking random digits
>> one at a time with (( RANDOM % 10 )), you won't see such a strong
>> weighting. In the case of single digits you are 0.03% less likely to get an
>> 8 or 9 than a 0 through 7, but that's a pretty mild deviation from
>> uniformity.
>>
>> On Mon, Sep 15, 2025 at 9:36 AM Clinton Bunch <[email protected]>
>> wrote:
>>
>>>
>>> I think i know why, it's because zsh's RANDOM tops out at 32,767, but
>>> this insures that the first digit of a string of random numbers isn't
>>> random but strongly weighted to 1 and 2, with 3 also weighted.  Is this
>>> worth worrying about?  I'd say so.  Perhaps it should max out at 10,000 or
>>> 100,000 or even offer a user selectable range?  Or do we have other tricks
>>> for coping with this?  I find zsh to be quite competent mathematically so
>>> having to use an external utility to get really random numbers seems not up
>>> to snuff.
>>>
>>> Check out the zsh/random module in the current test release and the
>>> zrand_int math function.
>>>
>>
>>
>> --
>> Mark J. Reed <[email protected]>
>>
>

-- 
Mark J. Reed <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.