Frage zu Modulo mit Multiplikation

Neue Frage »

eey Auf diesen Beitrag antworten »
Frage zu Modulo mit Multiplikation
Hallo zusammen,

gibt es eine Möglichkeit so etwas hier



zu rechnen ohne die Multiplikation so wie sie da steht auszuführen? Ich hab es schon so probiert:



Aber das bringt mir leider nichts, weil durch den großen Modulus dann wieder die gleiche Multiplikation da steht....

Gibt es einen Trick das zu vermeiden, so dass man mit kleineren Zahlen rechnen kann?

Schöne Grüße,
eey
watcher Auf diesen Beitrag antworten »

Hallo,


die Standardschreibweise ist, da deutlich übersichtlicher:



Hier bittet es nicht an als Repräsentanten der Restklassen zu verwenden.
eey Auf diesen Beitrag antworten »

Hallo,

danke schonmal für die Antwort!

Zitat:
Original von watcher
Hier bittet es nicht an als Repräsentanten der Restklassen zu verwenden.


Das versteh ich noch nicht ganz... meinst du es bietet sich an oder es bietet sich nicht an? Und wie bekomme ich effektiv diese Restklassen?

Schöne Grüße,
eey
watcher Auf diesen Beitrag antworten »

Sorry, Tippfehler wohl heute schon zu spät.
Es bietet sich an.

Wie du diese Darstellung kriegst. Sehr schnell, sehr banal. Bitte etwas drüber nachdenken, ist nicht schwer.
eey Auf diesen Beitrag antworten »

Hallo nochmal,

also ich bin mir nicht sicher ob ich es richtig verstanden habe, aber ich hab es jetzt erstmal so gemacht:







Damit bin ich jetzt von einer Multiplikation von 71356*61234 auf eine Multiplikation von -11221 *(-21343) runtergekommen. In diesem Fall ist das Ok und alles funktioniert wie gewünscht.


Problematisch wirds allerdings bei noch größeren Zahlen, wie zum Beispiel:



Wenn ich hier genauso wie oben vorgehe erhalte ich:





Gibt es noch weitere Möglichkeiten die Multiplikation zu verkleinern oder hab ich das mit den Restklassen falsch verstanden?

Schöne Grüße,
eey
watcher Auf diesen Beitrag antworten »

Schaut alles richtig aus.

Im Allgemeinen gibt es keinen weiteren Weg "die Multiplikation zu verkleinern".

Also was ist die eigentliche Frage, bzw. wieso ist die Multiplikation zweier (dezimal) 5-stelliger Zahlen schon zu "groß"?
Int ist hier kein geeigneter Datentyp.
 
 
eey Auf diesen Beitrag antworten »

Das Problem ist, dass ich in einer Sprache programmiere die nur single Genauigkeit hat (egal welcher Datentyp).

Das heißt dass keine Zahlen größer als 2147483647 verwendet werden können.



wird korrekt berechnet. 57503*57503 ist aber größer als 2147483647 und führt zu folgendem:



Also heißt das ich hab keine Chance da noch irgendwas zu drehen?

Schöne Grüße,
eey
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von eey
Das heißt dass keine Zahlen größer als 2147483647 verwendet werden können.

Also "nur" 32 Bit. Steig mal auf 64 Bit um, bzw. wenn du öfters mit so großen Zahlen opererieren willst, dann schau dich gleich mal nach einer Bibliothek wie z.B. der GMP

http://gmplib.org/

um. Augenzwinkern
eey Auf diesen Beitrag antworten »

Zitat:
Original von HAL 9000
Also "nur" 32 Bit. Steig mal auf 64 Bit um


Das geht leider nicht Big Laugh

Das Ganze ist innerhalb einer eingebetteten Programmiersprache einer Uralten Anwendung...
Leider hab ich nur 32 bit oder Strings zur Verfügung. unglücklich

Ich könnte das alles auch mit Strings machen (also sowas wie ne BigInt Klasse), aber das ist natürlich um mehrere Größenordnungen langsamer. Daher wollte ich erstmal schauen ob es noch irgendwelche Tricks gibt sowas zu berechnen.
HAL 9000 Auf diesen Beitrag antworten »

Na dann rechne doch so, wie man immer rechnet, wenn die Bitbreite nicht ausreicht:

Wähle irgendein "Zwischenmodul" , dessen Quadrat noch in deinen Zahlbereich passt, vorzugsweise eine Zweierpotenz, passend wäre hier .

Nun gilt für das Produkt von und



sowie dann

.

So oder ähnlich kannst du das doch herunterbrechen. Ist übrigens kein "Trick", sondern absolutes Standardvorgehen.


P.S.: Ist natürlich irgendwie saublöd, dass dein Modul die Eigenschaft hat, dass bereits dessen Quadrat deinen Zahlbereich überschreitet. Das macht deine einengende Programmiersprache irgendwie ungeeignet für dein Ansinnen, noch dazu, da du anscheinend auch noch Performance brauchst (wenn Emulationen wie BigInt dir "zu langsam" sind).
eey Auf diesen Beitrag antworten »

Zitat:
Original von HAL 9000
Na dann rechne doch so, wie man immer rechnet, wenn die Bitbreite nicht ausreicht:

Wähle irgendein "Zwischenmodul" , dessen Quadrat noch in deinen Zahlbereich passt, vorzugsweise eine Zweierpotenz, passend wäre hier .

Nun gilt für das Produkt von und



sowie dann

.


Sowas in der Art hab ich gesucht, sieht schonmal sehr vielversprechend aus, danke Freude

Zitat:
Original von HAL 9000
So oder ähnlich kannst du das doch herunterbrechen. Ist übrigens kein "Trick", sondern absolutes Standardvorgehen.


Ja, ich kenn mich mit modulo Rechnung eigentlich überhaupt nicht aus (hab das noch nie gebraucht bis jetzt)... Mein bisschen "Wissen" hab ich mir nur aus Wikipedia zusammen gesucht Big Laugh

Zitat:
Original von HAL 9000
P.S.: Ist natürlich irgendwie saublöd, dass dein Modul die Eigenschaft hat, dass bereits dessen Quadrat deinen Zahlbereich überschreitet. Das macht deine einengende Programmiersprache irgendwie ungeeignet für dein Ansinnen, noch dazu, da du anscheinend auch noch Performance brauchst (wenn Emulationen wie BigInt dir "zu langsam" sind).


Ich probier mal deinen Vorschlag aus, vielleicht reicht das ja schon...

Schöne Grüße,
eey
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »