לא, לא עזרת... ../images/Emo3.gif
זה אולי מגביל את המספרים, אבל יותר משזה מגביל את המספרים, זה מגביל את האקראיות.. תאר לך מצב כזה: יש לך פונקציה שמגרילה מספרים מ0 עד 4(כולל), ואתה רוצה להגביל אותם למספרים מ0 עד 2. לפי ההגיון שלך, נגריל מספר, ונעשה מודולו 3. רק מה? ההסתברות שיצא המספר 0 = 1/5. ההסתברות שיצא המספר 1 = 1/5, ההסתברות שיצא המספר 2 = 1/5, המספר 3 = 1/5, המספר 4 = 1/5. עכשיו אחרי פעולת המודולו: ההסתברות שיצא המספר 0 = 2/5 (גם 0 וגם 3 מתאימים), ההסתברות שיצא המספר 1 = 2/5 (גם 1 וגם 4 מתאימים), וההסתברות שיצא המספר 2 = 1/5 (רק 2 מתאים). מסקנה? ההתפלגות לא אחידה, עד כדי כך שלחלק מהמספרים יש הסתברות גדולה פי 2 מאשר מספרים אחרים. ולא, זה לא תקף רק לדוגמה של מספרים קטנים, גם אם פונקציית rand שנותנת מספרים מ0 עד 32767, אם תנסה להגריל בשיטה הזאת מספר מ0 עד 21845, תתקל בבעיה זהה. אז איך בכל זאת עושים? אם רוצים לעבור מטווח של 0 עד X לטווח של 0 עד Y: מכפילים את המספר שיצא לך בY, ומחלקים בX(וכמובן שדואגים שהטיפוס משתנה שלך מספיק גדול כדי להכיל את המספר X כפול Y, אחרת יהיו לך גלישות, והתוצאות לא יצא טובות).