باستخدام دفعة ل (الزائفة)مولد رقم عشوائي من مزدوجة طويلة
-
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
.
لا تنتمي إلى StackOverflow