pow funktion und modulo



  • Hallo zusammen,
    bin absoluter anfänger und versuche gerade eine programm in c zu schreiben.
    dabei möchte ich zunächst eine Potenz xe bestimmen (benutze dafür momentan pow) und anschließend modulo m reduzieren.
    Das Problem ist dass beim potenzieren sehr große zahlen berechnet werden sollen, außerhalb des definitionsbereichs für int.
    beim reduzieren modulo m sind so wie ich das sehe aber nur integer erlaubt.

    ...
    double a,b,e,x;
    int m;
    ...
    a=pow(x,e);
    b=a%m;
    ...
    wenn ich alle variablen als integer habe funktioniert das für sehr kleine eingaben bestens, sobald aber x oder e im zweistelligen bereich ist steht überall eine 0.
    kann mir jemand helfen, wie ich das problem lösen kann?
    wäre dankbar für jede hilfe.
    gruß shnicky


  • Mod

    1. Hier ist C++, nicht C. Wobei hier eigentlich eher Mathematik als Thema passen würde
    2. Es gibt Modulo auch für double, nennt sich fmod (float modulo). Ich rate aber mal, dass du ein exaktes Ergebnis möchtest, da du bestimmt Kryptographie machst, wenn du so etwas rechnen möchtest. Da bist du mit Fließkommazahlen auf dem falschen Weg.
    3. Numerische Genauigkeitsprobleme löst man besser durch Nachdenken als durch Rechenpower. Oder indem man das Ergebnis des Nachdenkens anderer Leute benutzt. Guckst du hier:
    http://en.wikipedia.org/wiki/Modular_exponentiation
    http://en.wikipedia.org/wiki/Exponentiation_by_squaring



  • super. vielen vielen dank! 🙂


Anmelden zum Antworten