大体の乱数は、「線形合同法」という方法で作成した擬人乱数です。詳しくは検索して調べてください。
rnd(x)の「線形合同法」は適当な値を x で割り、その余りを最終的な乱数とします。
a = ある数 \ x
↓
a の区間は [0, x-1]
#module
#defcfunc _rnd int n, local a, local c, local m
; 8で割って5余る数
a = 8 * 10 + 5
; 奇数
c = 47
; 2の累乗(大きめにとると周期が延びる)
m = 2 << 16
x = (a*x + c) \ m
return x \ n ; ← 乱数を 0 ≦ _rnd(n) ≦ n-1 にする
#global
title "赤 = rnd(x) , 青 = _rnd(x)"
repeat 64
a = rnd(101)
color 255, 0, 0 : boxf 10*cnt, 240, 10*cnt+5, 2.4*a
a = _rnd(101)
color 0, 0, 255 : boxf 10*cnt, 480, 10*cnt+5, 240+2.4*a
loop
上のプログラムから分かるように、rnd(x) は余りを出すために割り算を行うので rnd(x) のパラメータに 0 は指定できません。