SCHNELLE BigInteger Klasse für C++
-
Folgendes Problem:
Ich habe grade in C++ ein Programm geschrieben, das mit dem Miller/Rabin Test prüft, ob Zahlen prim sind oder nicht. Dazu habe ich die RossiBigInt-Klasse von Sourceforge.net verwendet. Um 500-Stellige Zahlen auf ihre Primeigenschaften zu überprüfen braucht das Programm 10 Minuten!!!
Schreibt man exact das gleiche Programm in JAVA und verwendet dort die standardmäßige BigInteger-Klasse dann läuft das Programm knapp 20 Sekunden. Das sind 3% von dem, was das C++ Programm braucht. Daher die Frage, ob jemand eine schnelle ausgereifte Klasse für große Integerwerte kennt die man benutzen kann. Mit der JAVA-Version wird die mit Sicherheit nicht mithalten können, aber hauptsache schneller als die RossiBigInt-Klasse für C++.
Oder vllt.hat ja jemand eine Idee, wie man so eine Klasse realisieren kann, bei der man besonders Multiplikationen und Modulo-Operationen schnell durchführen kann...EDIT: Ich glaube, ich habe da was gefunden...
http://gmplib.org/
-
Ich habe mich getäuscht...
Die GMP-Klasse ist schneller als die BigInteger von JAVA. Einfach genial
-
DerFrosch schrieb:
Daher die Frage, ob jemand eine schnelle ausgereifte Klasse für große Integerwerte kennt die man benutzen kann. Mit der JAVA-Version wird die mit Sicherheit nicht mithalten können, aber hauptsache schneller als die RossiBigInt-Klasse für C++.
Ähmm, nur mal so eine grundsätzliche Frage: Dir ist bewusst wie Java und wie C++ funktionieren?
Der Regelfall ist das etwa gleichwertige Funktionalitäten entweder kaum ein Performanceunterschied, oder tendenziell C++ schneller ist (Es gibt ein paar - häufig theoretische - Fälle in den Sprachen wie C# und Java tatsächlich schneller sind; In dem typischen Zusammenspiel in einer größeren Anwendung wird aber die native Programmierung in der Regel immer schneller sein).
Versteh mich nicht falsch, ich will Java/C# nicht schlecht reden, aber in belangen wo es rein um Performance geht, wird native Programmierung häufig schneller sein (Die Stärken von Java/C# liegen in anderen Bereichen).
-
Java und C++ sind in numerischer Performance etwa gleich schnell.
Schreibt man exact das gleiche Programm in JAVA
Leider programmiert man numerische Probleme in Java anders als in beispielsweise C++. So kann es durchaus zu starken Performanceunterschieden kommen.