Aşağıdaki kod sezgisel davranmaya görünmüyor: Bu kod çalıştırmaC++ 11 sınıfının <random> sınıfındaki dağılımları, temeldeki jeneratörü nasıl dönüştürür?
#include <random>
#include <iostream>
using namespace std;
int main()
{
mt19937 MyGenerator(40);
auto gauss = normal_distribution<double>(0,1);
auto linear = uniform_real_distribution<double>(0,1);
cout << gauss(MyGenerator) << endl; //line a
cout << linear(MyGenerator) << endl; //line b
cout << gauss(MyGenerator) << endl;
}
çıktı üretmesi
-0.816097
0.705030
0.303032.
şimdi ise hatları a ve b emir verir
için, çıkış değişiklikleri takas edilir0.644008
0.338080
-0.639501.
Farklı dağılımlar tarafından üretildiğinden, ilk iki sayının artık farklı olduğu tamamen açıktır. Yine de, üçüncü sayı neden farklı? Sezgilerime göre dağılım, belirli bir aralıktaki rastgele sayıya eşlenen bir sayı c = MyGenerator() almalıdır. Rasgele sayı üreteci, dağıtım çağrısından sonraki sayıların sırasındaki bir sonraki sayıya işaret eder. Yani, üçüncü görüşmenin sonucu her iki durumda da aynı olmamalı mı?
başka gözlem: bir ileri dağılımları birine çağrı ekleme aslında aynı numaraları çoğaltmak görünüyor.
I 'aurng (bulunan) 'daima GCC 6.1.0 sonsuz döngü neden 0, döner. Olmaması gereken –
@ LiDong; URNG'nizin bozuk olduğunu gösterir. – ecatmur
Ben http://stackoverflow.com/questions/38350743/infinite-loop-in-random-tcc-gcc-6-1-0-may-be-bug-in-armadillo –