باستخدام دفعة ل (الزائفة)مولد رقم عشوائي من مزدوجة طويلة

StackOverflow https://stackoverflow.com//questions/9615622

  •  09-12-2019
  •  | 
  •  

سؤال

أحاول استخدام دفعة لتوليد رقم عشوائي من ضعف طويل (على جهاز 64 بت).

في مرحلة ما يمكنني استخدام

rng = boost::mt19937();

ومع ذلك ، يجادل المترجم أنه على الخط 88 من دفعة/عشوائية/ميرسين_التويستر.هب,

x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask;

هناك تحويل ضمني يقصر 64 بت إلى قيمة 32 بت...

لم أكن حتى تحديد ما إذا كنت تريد مزدوجة طويلة أو مزدوجة...لماذا يجادل في ذلك?لأنني أستخدم نظام تشغيل 64 بت?

هل هناك أي حل بسيط لهذه المشكلة?أحتاج إلى مولد مزدوج طويل...الانجاز

شكرا

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

المحلول

ال mt19937 هو 32 بت.يتم تعريفه في دفعة مثل

typedef mersenne_twister_engine<uint32_t,32,624,397,31,0x9908b0df,
11,0xffffffff,7,0x9d2c5680,15,0xefc60000,18,1812433253> mt19937;

ل 64 بت هو ضروري لاستخدام mt19937_64.

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