سؤال

ومن الأمثلة المحددة

وأنا بحاجة لتوليد رقم عشوائي بين 0 و 2 وشامل. (أو اختيار عشوائي بين -1 و 0 و 1).

وهذا النهج سيكون من السذاجة أن تفعل شيئا مثل rand() mod 3 حيث يعود rand() عدد صحيح. وهذا النهج لا تولد أرقام عشوائية إحصائيا إلا العليا ملزمة من rand() ليس رئيس نسبيا (وملزمة أقل من 0).

وعلى سبيل المثال، على افتراض راند () عاد 2 بت (0-3، ضمنا)، ومعامل سيكون الخريطة:

0 -> 0
1 -> 1
2 -> 2
3 -> 0

وهذا الانحراف نحو 0 سيكون أقل بكثير من الواضح ما اذا كان سيتم إرجاع أكثر من بت، ولكن بغض النظر، ستبقى الانحراف.

والسؤال عام

هل هناك وسيلة لتوليد رقم عشوائي موزعة بالتساوي بين 0 و n-1، شاملة، حيث n هو رئيس نسبيا إلى 2؟

هل كانت مفيدة؟

المحلول

ونهج مشترك هو تجاهل القيم العشوائية فوق دورة كاملة الماضية، واسألوا عن رقم عشوائي جديد.

نصائح أخرى

وقد تساعد على اختيار راند الخاص بك () الحد الأعلى ليكون ك * n حيث ك عدد صحيح. وبهذه الطريقة سيتم توزيع نتائج بالتساوي بشرط أن راند () هو مولد عشوائي جيد.

وإذا كان من غير الممكن للحد من الحد العلوي، يمكنك اختيار ك بحيث ك ن * هو أقرب إلى rand () الحد الأعلى ممكن وتجاهل نتائج فوق هذا العدد المحاولة مرة أخرى.

جوابي على سؤال مماثل.

والأساس، واستخدام RNG وتجاهل كل ما سبق N وحاول مرة أخرى. لتعظيم الاستفادة، يمكنك استخدام وزارة الدفاع، وتجاهل كل ما سبق ن * الكلمة (MAX / ن)

عام الجواب: تحتاج إلى استخدام أكثر من مجرد 2 بت من الرقم.

وبلدي وبحكم التجربة هو لتوليد القيم الفاصلة العائمة، <م> س ، 0.0 <= <م> س <1.0، ضرب من قبل 3 واقتطاع. يجب أن تحصل على القيم في النطاق من 0 و 1 و 2 التي تعتمد على عدد أكبر من البتات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top