long erweitern
-
Hallo Leute!
Wie kann ich einen neuen Datentypen definieren, der long übersteigt? Ja auf die Idee long long oder _longlong bin ich auch schon gekommen, aber funktioniert natürlich nicht.
typedef long zahl; // ist ja auch nur beschränkt, ich würd gerne den Datentyp halt so groß haben wie ich's wirklich brauch
Wie geht das?
Thx
-
die einzig mir bekannte möglichkeit wäre sowas wie:
struct xlong { unsigned char bytenum[BYTE_ANZ]; };
und dann die bits selber hierschreiben und alle operationen selbst neu schreiben^^
oder was vll. auch geht: bei jedem Überlauf, diesen in eine neue Variable zu speichern. Ist ein sehr aufwändiges Unterfangen...
-
Sowas will man aber in der Regel nicht selbst bauen und greift lieber gleich zu Lib a la http://gmplib.org/
-
TLEP schrieb:
die einzig mir bekannte möglichkeit wäre sowas wie:
struct xlong { unsigned char bytenum[BYTE_ANZ]; };
und dann die bits selber hierschreiben und alle operationen selbst neu schreiben^^
oder was vll. auch geht: bei jedem Überlauf, diesen in eine neue Variable zu speichern. Ist ein sehr aufwändiges Unterfangen...
Steh grad total aufm Schlauch. Wie bind ich denn das jetzt in mein Programm ein? Also als Beispiel für die Zahl 1000000000000000000000000000000 ?
*Kaffee hol*
-
vll. solltest du dir wirklich mit der Bibliothe beschäfftigen, ich glaub das ist effektiver... ich neige immer dazu alles selber schreiben zu wollen, darum hab ich das geschrieben!
-
TLEP schrieb:
vll. solltest du dir wirklich mit der Bibliothe beschäfftigen, ich glaub das ist effektiver... ich neige immer dazu alles selber schreiben zu wollen, darum hab ich das geschrieben!
TLEP, mir geht es ja, das klingt jetzt richtig blöd, selber schreiben.^^
-
naja, im Endeffekt arbeitest du dann auf der Basis 256 (da unsigned char = 1 Byte). Das heißt intern arbeitest du immer mit der Basis 256, was im Fall der Addition, Subtraktion, etc relativ einfach ist. Zur Ausgabe gehst du dann auf die Basis 10 und gibst es aus (z.b. in eine File oder auf stdout). Dazu musst du umrechnen zwischen den Basen (so ähnlich machts meines Wissens nach auch die GMP). Für die Multiplikation von großen Zahlen würd ich mir was einfallen lassen, da die einfache Multiplikation an sich ja relativ langsam ist (Stichwort --> Faltung ansehen), gibts auch Lösungswege dafür, soweit ich weiß.
Wenn du wirklich alles für diese Zahlen in C selbst schreiben willst, is das ne Menge Holz, also wenn du beliebige Datentypen als sehr große Zahlen darstellen willst, brauchste da einiges an Arbeit. Wenn dus bloß benutzen willst, würd ich die GMP verwenden. Allerdings kannst du es auch selbst machen. Mit dem Ansatz kannst du theoretisch (natürlich eingeschränkt durch den vorhandenen Speicher) den Zahlenbereich unendlich erweitern.