Ich versuche, einige Python-Code in C++ zu übersetzen. Was der Code tut, ist eine Monte-Carlo-Simulation auszuführen. Ich dachte, die Ergebnisse von Python und C++ könnten sehr nahe liegen, aber es scheint etwas Lustiges passiert zu sein. HierUnterschied zwischen C++ Zufallszahlengenerierung und Python
ist, was ich in Python zu tun:
self.__length = 100
self.__monte_carlo_array=np.random.uniform(0.0, 1.0, self.__length)
Hier ist, was ich in C tun ++:
int length = 100;
std::random_device rd;
std::mt19937_64 mt(rd());
std::uniform_real_distribution<double> distribution(0, 1);
for(int i = 0; i < length; i++)
{
double d = distribution(mt);
monte_carlo_array[i] = d;
}
ich oben Erzeugung von Zufallszahlen lief mal 100x5 sowohl in Python und C++, und dann Mach Monte Carlo Simulation mit diesen Zufallszahlen.
In Monte Carlo Simulation, setze ich den Schwellenwert als 0,5, so kann ich leicht überprüfen, ob die Ergebnisse gleichmäßig verteilt sind. Hier
ist ein Konzeptentwurf, was Monte Carlo Simulation tut:
for(i = 0; i < length; i++)
{
if(monte_carlo_array[i] > threshold) // threshold = 0.5
monte_carlo_output[i] = 1;
else
monte_carlo_output[i] = 0;
}
Da der Länge der Monte-Carlo-Array 120, erwarte ich 60 1
s zu sehen, sowohl in Python und C++. Ich berechne die durchschnittliche Anzahl von 1
s und festgestellt, dass, obwohl die durchschnittliche Anzahl in C++ und Python ist rund 60, aber der Trend sind stark korreliert. Darüber hinaus ist die durchschnittliche Anzahl in Python immer höher als in C++.
Darf ich wissen, ob dies daran liegt, dass ich etwas falsch gemacht habe, oder einfach weil der Unterschied zwischen zufälligen Generierungsmechanismen in C++ und Python besteht?
[Bearbeiten] Bitte beachten Sie, dass die RNG in Python ist auch die Mersenne-Twister-19937.
Verschiedene Zufallszahlengeneratoren geben unterschiedliche Sätze von Zufallszahlen. Ich würde erwarten, dass, wenn Sie es ein paar Mal (wie hunderte Male) ausführen, Sie einen weniger offensichtlichen Unterschied bekommen würden. –
Ist das wirklich was du siehst mit dem Code, den du zeigst? Es muss andere Eingaben geben, sonst würde überhaupt kein Zusammenhang zwischen den Codes bestehen! Ich vermute, der Fehler ist woanders ... –
Diese Ergebnisse Nähte manipuliert ... –