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.


Anmelden zum Antworten