Ich bin derzeit unter anderem meine C und C++ Kenntnisse mal wieder am auffrischen (Hobby). Nun habe ich ein kleines Programm erstellt, welches ich vor längerer Zeit schon mal in Python erstellt habe, und hab das mal verglichen.
Es ist ein Programm, dass die Kreiszahl Pi empirisch ermitteln soll.
Mir ist klar das Python "langsamer" ist als ein Compiliertes C++ Programm, aber das der Unterschied so gewaltig ist, damit habe ich nicht gerechnet.
Hier die Beiden Programmcodes:
Python:
Code: Alles auswählen
r = 3000
treffer = 0
quadtreffer = r**2
for i in range(r):
x2 = (i+0.5)**2
for j in range(r):
y2 = (j+0.5)**2
#print("x2: ", x2, " y2: ", y2, '\n')
if (x2 + y2 <= quadtreffer):
treffer += 1
print("%.5f" %(4*treffer/quadtreffer))
Code: Alles auswählen
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char **argv)
{
int r = 3000, treffer = 0;
double quadtreffer = pow(r,2);
double x2 = 0.0, y2 = 0.0;
for(int i=0; i<r; i++) {
x2 = pow((i+0.5),2);
for(int j=0; j<r; j++) {
y2 = pow((j+0.5),2);
//cout << "x2: " << x2 << " y2: " << y2 << endl;
if((x2+y2) <= quadtreffer) {
treffer++;
}
}
}
cout << (4*treffer/quadtreffer);
return 0;
}
Beide Programme habe ich auf dem RaspberryPi ausgeführt, dabei habe ich noch das Programm time verwendet um die Laufzeit zu vergleichen.
Ergebnis:
"time python ./pi.py3"
Python Laufzeit = 3 Min 31,201 Sek
"time ./pi"
C++ Laufzeit = 4,151 Sek
Das C++ Programm hat also gerade einmal 1,25% der Zeit des Python Skriptes gebraucht. Hab ich hier irgendwo einen grob fahrlässigen Fehler gemacht, oder ist dieser Extreme Unterschied normal ?
Wenn ich die auskommentierten Ausgabezeilen in der inneren For-Schleife auch noch ausgeben lasse brauchen beide deutlich länger, aber auch dann ist das c++ Programm bei weitem schneller.
EDIT:
Ich habe im übrigen auch versucht die beiden Variablen im Python Skript "global" am anfang mit x2 = 0.0 und y2 = 0.0 zu deklarieren, da ich dachte das es eventuell daran liegt das er bei jeden schleifendurchlauf den Speicher dafür neu "einkaufen" muss. Dies hat die Laufzeit aber noch auf 3 Min 57 Sek angehoben.
Grüße Jens