「ランダム」が実はランダムでないとき——剰余演算が分布を歪める罠
When random is not actually random enough

配列からランダムに要素を選ぶとき、random_u64() % n という剰余演算を使うと、一様分布が保たれず特定の要素が選ばれやすくなる。例えば10個の入力から3つの選択肢を選ぶと、最初の選択肢が40%の確率で出現し、残りは30%ずつになる。著者はこの問題を避けるため、確率分布を明示できるrandom_choice()の導入を勧め、整数の相対重みを使う方法や、Antithesisでのファジングテストへの応用例を紹介する。
次に元のサンプルのようなコードを見かけたら、自問してください:望む分布を直接表現できないだろうか?