mam prosty przykładowy kod:Dlaczego GCC i MSVC std :: normal_distribution są różne?
#include <iostream>
#include <random>
using namespace std;
int main() {
minstd_rand0 gen(1);
uniform_real_distribution<double> dist(0.0, 1.0);
for(int i = 0; i < 10; ++i) {
cout << "1 " << dist(gen) << endl;
}
normal_distribution<double> dist2(0.0, 1.0);
minstd_rand0 gen2(1);
for(int i = 0; i < 10; ++i) {
cout << "2 " << dist2(gen2) << endl;
}
return 0;
}
Które skompilować na gcc i msvc. I dostać Diferent wyniki na kodzie std! (
Więc dlaczego GCC i MSVC std::normal_distribution
wyniki są zmierzających do tego samego materiału siewnego i generatora, i, co najważniejsze, jak siła im być takie same?
Fascynujące. Spodziewałbym się, że będą miały 100% różne lub w 100% identyczne liczby. To, że są takie same, ale przebudowane, budzi mój umysł. –
Wyniki 'uniform_real_distribution' są zgodne z oczekiwaniami! – DuckQueen
@MooingDuck: Standardowy algorytm tutaj tworzy dwie wartości w każdej iteracji. Wygląda na to, że obaj używają tej samej implementacji algorytmu, ale różnią się, która z tych dwóch wartości jest zwracana, a która jest buforowana. – Hurkyl