صيغة رمي النرد؟
Math.floor(Math.random() * 6) + 1 يعطي أعداداً صحيحة 1-6 باحتمال متساوٍ. لقلب العملة استخدم Math.round(Math.random()) للحصول على 0 أو 1.
إنشاء أرقام عشوائية بنطاق وعدد مخصصين
شبه عشوائي، موزع إحصائياً بشكل جيد، لكن يمكن التنبؤ به إن عُرفت البذرة. استخدم 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()، يستطيع إعادة إنتاج جميع القيم "العشوائية" — بما فيها الرموز ومعرّفات الجلسات وروابط إعادة تعيين كلمة المرور. يستخدم crypto.getRandomValues() من واجهة Web Crypto API مجمع إنتروبيا نظام التشغيل، مما يجعله مناسباً للتطبيقات الحساسة أمنياً.
يعالج Fisher-Yates المصفوفة من الخلف، ويبادل في كل خطوة العنصر الحالي مع عنصر في موضع عشوائي لم يُعالَج بعد، والتعقيد الزمني O(n). الطريقة الساذجة "ولّد واختبر التكرار" تبطئ تدريجياً عند الاقتراب من الحد، بينما يعمل Fisher-Yates دائماً بشكل خطي.
المولدات الجيدة تنتج توزيعاً منتظماً حيث تظهر كل قيمة في النطاق باحتمال متساوٍ. صيغة الأعداد الصحيحة: Math.floor(Math.random() * (max - min + 1)) + min. إذا احتاجت المحاكاة إلى التوزيع الطبيعي أو توزيع بواسون لمحاكاة الظواهر الطبيعية، فستلزم تحولات إضافية كتحويل Box-Muller.
تنشأ ميزة البيت في الكازينوهات من التصميم الرياضي وليس من التلاعب بالأرقام العشوائية. عجلة الروليت تحتوي 37 خانة (0-36)، وعند ظهور 0 يأخذ الكازينو جميع الرهانات، مما يُنشئ ميزة 2.7%. تتطلب المقامرة الإلكترونية استخدام مولدات أرقام عشوائية معتمدة من جهات خارجية.