Random......

smasher

New member
Random......

שלום... רציתי לדעת אם מישהו יודע מה המימוש או האלגוריתם בגדול של פונקציית הרנדום... בעיקרון זה לא ממש רנדום אלא אם מפעלים randomize() , ומשום מה אני חושב שגם אז זה לא ממש רנדום ...
 

DecayCell

New member
כמובן שזה לא אקראי לחלוטין

הפונקציה ()random היא מה שמכונה בלעז "Pseudo-random Number Generator" - מחולל מספרים אקראיים מדומים. היא בנויה כך שבכל פעם שתיתן לה זרע שונה (seed; לרוב משתמשים בשעה הנוכחית בתור זרע, מאחר וזהו מספר המשתנה כל שניה) היא תיצור רצף שונה של מספרים (למרות שבהינתן הזרע ומימוש הפונקציה ניתן לחזות מה יהיה הרצף הזה). הרי המימוש הבסיסי שמציע K&R:
unsigned long int next = 1; /*rand: return pseudo-random integer on 0..32767 */ int rand(void) { next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768; } /* srand: set seed for rand() */ void srand(unsigned int seed) { next = seed; }​
ישנה אופציה טובה יותר, בלוחות-אם חדשים, שמאפשרת ליצור מספר אקראי בעזרת קליטת רעש לבן מן האוויר, ולכן לא ניתן לחזות את המספר שייתקבל; אולם לצורך כך יש להשתמש בדרייברים מתאימים וזה כבר הופך לסיפור שלם - לא חיוני בעליל לתוכנית קטנה שלא מצריכה אקראיות מלאה (בניגוד לתוכנות הצפנה, למשל).
 
למעלה