سؤال

لدي بعض الوظائف التي تولد قيم عشوائية مزدوجة ، تعويم ، قصيرة وطويلة. لدي وظيفة أخرى أقوم بها بتمرير نوع البيانات والتي يجب أن تعيد قيمة عشوائية. الآن أحتاج إلى الاختيار في هذه الوظيفة قيمة الإرجاع بناءً على نوع البيانات الذي تم تمريره. على سبيل المثال ، إذا مررت بالتعويم ، فأنا بحاجة إلى:

احتمال أن يكون العائد هو التعويم هو 70 ٪ ، احتمال أن يكون العائد مزدوجًا أو قصيرًا أو طويلًا 10 ٪ لكل منهما. يمكنني إجراء مكالمات إلى الوظيفة الأخرى لإنشاء القيم العشوائية المقابلة ، ولكن كيف يمكنني أن أتناسب مع الأوزان الاحتمالية للعائد النهائي؟ الكود الخاص بي في C ++.

يتم تقدير بعض المؤشرات.

شكرًا.

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

المحلول

أرقام عشوائية C ++ توزيع موحد. اذا احتجت المتغيرات العشوائية من جانب اخر توزيع تحتاج إلى بناء صيغتها الرياضية على التوزيع الموحد.

إذا لم يكن لديك صيغة رياضية للمتغير العشوائي ، فيمكنك فعل شيء مثل هذا:

int x = rand() % 10;
if (x < 7)
{
 // return float
}
else (if x == 7)
{
 // return double
}
else (if x == 8)
{
 // return short
}
else (if x == 9)
{
 // return long
}

نصائح أخرى

يمكن أن يكون هذا بمثابة بديل للمراجع المستقبلية التي يمكن أن تحصل على احتمال القيم الدقيقة مثل 99.999 ٪ أو 0.0001 ٪ للحصول على الاحتمال (النسبة المئوية الحقيقية) على هذا النحو:

//70%
double probability = 0.7;
double result = rand() / RAND_MAX;
if(result < probability)
   //do something

لقد استخدمت هذه الطريقة لإنشاء شبكات كبيرة جدًا مسكنة وتعمل مثل سحر لقيم الدقة.

لا أعرف ما إذا كنت أفهم بشكل صحيح ما تريد القيام به ، ولكن إذا كنت تريد فقط أن تؤكد أن الاحتمالات تتراوح بين 70-10-10 ، فافعل ما يلي:

  • توليد رقم عشوائي r في (1،2،3،4،5،6،7،8،9،10)
  • إذا r <= 7: يطفو
  • إذا r == 8: قصيرة
  • إذا r == 9: مزدوج
  • إذا r == 10: طويل

أعتقد أنك تتعرف ويمكنك تكييف النمط مع قيم الاحتمال التعسفي.

يحتوي Mmonem على مفتاح احتمالي لطيف ، لكن إرجاع أنواع مختلفة ليس تافهة أيضًا. تحتاج إلى نوع واحد قد يقوم بتشفير أي نوع واحد (لأغراضك) بشكل كافٍ أي من القيم - تحقق من Boost :: any ، Boost :: Variant ، Union ، أو التحويل إلى أكثر أنواع القدر (ربما مزدوجة) ، أو تمثيل السلسلة.

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