tooliv

مولد الأرقام العشوائية

إنشاء أرقام عشوائية بنطاق وعدد مخصصين

ترتيب

مولد الأرقام العشوائية

ما مدى عشوائية Math.random()؟

شبه عشوائي، موزع إحصائياً بشكل جيد، لكن يمكن التنبؤ به إن عُرفت البذرة. استخدم crypto.getRandomValues() للأمان لأنه يستخدم مجمع إنتروبيا نظام التشغيل.

صيغة رمي النرد؟

Math.floor(Math.random() * 6) + 1 يعطي أعداداً صحيحة 1-6 باحتمال متساوٍ. لقلب العملة استخدم Math.round(Math.random()) للحصول على 0 أو 1.

كيف أولد أرقام اليانصيب؟

استخدم Fisher-Yates على مصفوفة [1..45] وخذ أول 6 عناصر. هذا يعطي تركيبة عشوائية تماماً بدون تكرار.

الأرقام العشوائية: حقيقية ومزيفة

تستخدم أجهزة الكمبيوتر في الغالب "أرقاماً شبه عشوائية" — يستخدم Math.random() خوارزمية حتمية مبنية على بذرة لإنتاج تسلسل يبدو عشوائياً. تتطلب الأرقام العشوائية الحقيقية إنتروبيا من ظواهر فيزيائية كالتحلل الإشعاعي أو الضوضاء الحرارية. بالنسبة للألعاب والمحاكاة، الأرقام الشبه عشوائية كافية تماماً، لكن في التشفير يكون الفرق بالغ الأهمية.

لماذا Math.random() غير آمن لكلمات المرور؟

إذا تمكن المهاجم من تحديد البذرة التي يستخدمها Math.random()، يستطيع إعادة إنتاج جميع القيم "العشوائية" — بما فيها الرموز ومعرّفات الجلسات وروابط إعادة تعيين كلمة المرور. يستخدم crypto.getRandomValues() من واجهة Web Crypto API مجمع إنتروبيا نظام التشغيل، مما يجعله مناسباً للتطبيقات الحساسة أمنياً.

خلط Fisher-Yates: العشوائية بدون تكرار

يعالج Fisher-Yates المصفوفة من الخلف، ويبادل في كل خطوة العنصر الحالي مع عنصر في موضع عشوائي لم يُعالَج بعد، والتعقيد الزمني O(n). الطريقة الساذجة "ولّد واختبر التكرار" تبطئ تدريجياً عند الاقتراب من الحد، بينما يعمل Fisher-Yates دائماً بشكل خطي.

التوزيع المنتظم وأهميته

المولدات الجيدة تنتج توزيعاً منتظماً حيث تظهر كل قيمة في النطاق باحتمال متساوٍ. صيغة الأعداد الصحيحة: Math.floor(Math.random() * (max - min + 1)) + min. إذا احتاجت المحاكاة إلى التوزيع الطبيعي أو توزيع بواسون لمحاكاة الظواهر الطبيعية، فستلزم تحولات إضافية كتحويل Box-Muller.

العشوائية في الألعاب والقمار

تنشأ ميزة البيت في الكازينوهات من التصميم الرياضي وليس من التلاعب بالأرقام العشوائية. عجلة الروليت تحتوي 37 خانة (0-36)، وعند ظهور 0 يأخذ الكازينو جميع الرهانات، مما يُنشئ ميزة 2.7%. تتطلب المقامرة الإلكترونية استخدام مولدات أرقام عشوائية معتمدة من جهات خارجية.

الأسئلة الشائعة

ما مدى عشوائية Math.random()؟

شبه عشوائي، موزع إحصائياً بشكل جيد، لكن يمكن التنبؤ به إن عُرفت البذرة. استخدم crypto.getRandomValues() للأمان لأنه يستخدم مجمع إنتروبيا نظام التشغيل.

صيغة رمي النرد؟

Math.floor(Math.random() * 6) + 1 يعطي أعداداً صحيحة 1-6 باحتمال متساوٍ. لقلب العملة استخدم Math.round(Math.random()) للحصول على 0 أو 1.

كيف أولد أرقام اليانصيب؟

استخدم Fisher-Yates على مصفوفة [1..45] وخذ أول 6 عناصر. هذا يعطي تركيبة عشوائية تماماً بدون تكرار.

أدوات ذات صلة