PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C/C++] Rechnen mit großen Zahlen


Gast
2010-08-18, 14:22:53
Hallo zusammen!

Ich stehe gerade vor dem Problem, dass ich 2 große Int-Werte vom ursprünglichen Typ mpz_t (GMP) multiplizieren muss.
Die Werte liegen nun im Hex-Format als Array-Darstellung vor, wurden also von mpz_t in Hex "konvertiert".
Nun muss ich mit diesen Hex-Werten rechnen, habe aber keine Ahnung wie. Eine Möglichkeit wäre wohl, wieder in mpz_t zurückzukonvertieren, die andere vieleicht, mit den Arrays zu rechnen? In beiden Fällen hab ich aber keinen Plan :).

Hoffentlich habt ihr was auf Lager, danke schonmal!

Ectoplasma
2010-08-18, 14:31:48
Soll das eine Hausaufgabe sein?

Pinoccio
2010-08-18, 14:32:13
Nun muss ich mit diesen Hex-Werten rechnen, habe aber keine Ahnung wie.en.Wikipedia (http://en.wikipedia.org/wiki/Multiplication_algorithm#Fast_multiplication_algorithms_for_large_inputs) bietet einen Überblick. Wenn du das öfters machst, lohnt sich evtl. was schnelles, für eher einmalige Multiplikation was einfach zu programmierendes.Eine Möglichkeit wäre wohl, wieder in mpz_t zurückzukonvertierenWohl sinnvoller - bzw. erst garnicht aus mpz_t wegzukonvertieren, falls das geht.

Soll das eine Hausaufgabe sein?Unwahrscheinlich - zumindest für Uni-Hausaufgaben viel zu praktisch. ><


mfg

TE-Gast
2010-08-18, 14:58:54
Wohl sinnvoller - bzw. erst garnicht aus mpz_t wegzukonvertieren, falls das geht.

Geht leider nicht.

Nein, es geht um keine Hausaufgabe. Ich will mir privat nur ein kleines Framework schreiben, dass so einige Dinge erleichtert.

Pinoccio
2010-08-18, 16:16:01
Geht leider nicht.

Nein, es geht um keine Hausaufgabe. Ich will mir privat nur ein kleines Framework schreiben, dass so einige Dinge erleichtert.Hm, ich würde da die HEX-Arrays wieder in GMP einlesen (http://gmplib.org/manual/Formatted-Input-Strings.html#Formatted-Input-Strings). Im Optimalfall weißt du ja, mit welcher Formatierung gespeichert wurde, genau die halt wieder zum einlesen. Und dann GMP multiplizieren (http://gmplib.org/manual/Integer-Arithmetic.html#Integer-Arithmetic) lassen, da wird automatisch der schnellste Algorithmus gewählt (http://gmplib.org/manual/Multiplication-Algorithms.html#Multiplication-Algorithms).

mfg

Gast
2010-08-19, 13:59:28
Danke für die Tips!

Irgendwie peil ich's aber grad nicht.
Wie kann ich z.b. ein Array { 0x4f, 0x82, 0xde, 0x3a } einlesen und in mpz_t konvertieren?

Pinoccio
2010-08-19, 15:28:26
Wie kann ich z.b. ein Array { 0x4f, 0x82, 0xde, 0x3a } einlesen und in mpz_t konvertieren?Behandle sie als Charakter-Arrays bzw. Strings und nutze die dafür vorgesehenen Funktionen, z.B. gmp_sscanf.

mfg

Gast
2010-08-19, 15:41:20
Behandle sie als Charakter-Arrays bzw. Strings und nutze die dafür vorgesehenen Funktionen, z.B. gmp_sscanf.

mfg

Soweit war ich auch :). Ich blick nur im GMP-Manual wegen den zig Parametern noch nicht durch. Die verwenden auch echt beschissene Beispiele.