Unendlich große ZaHLEN

Hi,

ich würde mir gerne einen Datentyp schreiben, der unendlich große Ganzzahlen speichern kann.

Ich weiß aber nicht, wie ich da vorgehen soll.
Ich will, das die Operationen genauso einfach sind wie bei integern.

Vielleicht kann mir jemand einen Link auf gute Literatur dazu geben.

mfg
Torsten

Hi,

ich würde mir gerne einen Datentyp schreiben, der unendlich
große Ganzzahlen speichern kann.

Fein, ist bloß die Frage, wie du unendlich definierst :smile:
Wenn du das so meinst, wie ich es verstehe, dann gibt es keinen Computer auf dieser Welt, der diese Zahl speichern kann.
Vergiss nicht die Tragweite von „unendlich“!!

Ich weiß aber nicht, wie ich da vorgehen soll.
Ich will, das die Operationen genauso einfach sind wie bei
integern.

Ich habe so etwas ähnliches mal in meinem Studium gemacht. Habe das System schon mal etwas beschrieben, dazu folgender Link:
http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…

Am Besten ist also, wenn du dir eine Klasse bastelst, die intern die einzelnen Stellen einer (sehr großen) Zahl in einem Array hält. Dafür die Rechenoperationen zu implementieren ist eine machbare Sache, wird bei Division aber bissel knifflig.

Viel Spaß
Bill

Hallo,

Fein, ist bloß die Frage, wie du unendlich definierst :smile:

Vielleicht mit zu jeder (darstellbaren) Zahl gibt es noch
eine größere (darstellbare) Zahl.

Wenn du das so meinst, wie ich es verstehe, dann gibt es
keinen Computer auf dieser Welt, der diese Zahl speichern
kann.

Ja aber üblicheweise wird bei der Semantik von Programmen
ohnehin von Speicherlimits abstrahiert.

Vergiss nicht die Tragweite von „unendlich“!!

Hmm, verdammt weit :wink:

Gruss
Enno

Hallo Torsten,

ich würde mir gerne einen Datentyp schreiben, der unendlich
große Ganzzahlen speichern kann.

Also unendlich ist, wie schon beschrieben, nicht drin.
Wenn wir einmal grosszügig annehmen, dass du 1GB freien Datenspeicher, das Programm braucht zusätzlich noch Speicher, hast dann darf eine Zahl höchstens 1/3 GB Speicherplatz benötigen (fast jede Rechenoperation benötigt 2 Operanden und ein Resultat).

Ich weiß aber nicht, wie ich da vorgehen soll.
Ich will, das die Operationen genauso einfach sind wie bei
integern.

Ganz einfach: nimm mal Papier und Bleistift und dokumentiere jeden einzelnen Rechenschritt. Mit dieser Methode kannst du ja mit beliebig grossen Zahlen rechnen, sofern du genug Papier und Bleistifte hast und eine göttliche Lebenserwartung.
Genauso wie das mit Papier und Bleistift machst kannst du es dann auch dem Computer beibringen.

MfG Peter(TOO)

Mir ist schon klar, was unendlich bedeutet, so blöd bin ich nun auch nicht. Aber im Vergleich mit den mitgelieferten Datentypen kann man das, was ich brauche als unendlich bezeichnen.

Denn als Informatikstudent hat man mit ganz anderen Dimensionen zu tun. Da benutzt man z.B. einen 1024 Bit Exponenten für RSA Verschlüsselungssysteme. Und dagegen sind die Standardtypen ein Fliegenklecks.

Insofern haben mir die Antworten leider nicht geholfen.

Torsten

Hallo Torsten,

Mir ist schon klar, was unendlich bedeutet, so blöd bin ich
nun auch nicht. Aber im Vergleich mit den mitgelieferten
Datentypen kann man das, was ich brauche als unendlich
bezeichnen.

Denn als Informatikstudent hat man mit ganz anderen
Dimensionen zu tun. Da benutzt man z.B. einen 1024 Bit
Exponenten für RSA Verschlüsselungssysteme. Und dagegen sind
die Standardtypen ein Fliegenklecks.

Insofern haben mir die Antworten leider nicht geholfen.

Dein Problem liegt entweder darin, dass du zu Faul bist und hier einfach eine fertige Lösung bekommen willst, oder du hast grundlegende Probleme mit den Grundlagen der Mathematik.

In beiden Fällen ist dieses Forum nicht der richtige Platz !!

In allen Unterlagen zur Assemblerprogrammierung stehen Beispiele wie man mit z.B. einer 8-Bit CPU 32-Bit Werte berechnet. diese Beispiele sind auf belibiege (Naja, soweit der Speicher reicht) skalierbar.
DIES SIND GRUNDLAGEN DER INFORMATIK.
Ein Computer ist eine rein mathemaschische Maschine, und , ausser er ist defekt, funktioniert er auch immer rein logisch auch wenn dies für den Menschen nicht immer durchschaubar ist.

Eine Fliesskomma-Zahl kann man schreiben als
m*b^e

Wobei
b = die Basis ist
m = die Mantisse zur basis b ist
und e = der exponent

b ist normalerweise eine konstante, also musst du nur noch m und e in eine, oder mehrere, Variablen packen und nach den ganz normalen Regeln rechnen.

MfG Peter(TOO)

Hallo Peter

Dein Problem liegt entweder darin, dass du zu Faul bist und
hier einfach eine fertige Lösung bekommen willst, oder du hast
grundlegende Probleme mit den Grundlagen der Mathematik.

Ich glaube du kennst mich nicht genug, um zu behaupten, dass ich zu faul bin, oder eine Lösung will. Was ich wollte waren Informationen zu diesem Thema und Vorschläge. Jedoch ging es in jeder Antwort darum, dass man mich belehren wollte, was unendlich bedeutet. Und das du jetzt auch noch obiges behauptest ist die Höhe. Anstatt auf meine Fragen einzugehen haben alle um den Brei herum geredet.
Wenn du ein Problem hast, willst du dann konstruktive Ideen oder Vorschläge oder willst du eine Belehrung über einen bestimmten Begriff? Und wenn du dann sagst, dass dir die Antwort nicht hilft, dann kommst so jemand wie du daher und behauptet du seist zu faul oder hast keine Ahnung.

Ich für meinen Teil informiere mich erst, bevor ich etwas anfange was ich noch nicht gemacht habe, denn oft haben andere wichtige Ratschläge.

Und nur zu deiner Information: Ich brauche das für überhaupt nichts. Mir haben die Standarddatentypen von C++ nur nicht ausgereicht, um meine Funktion zur Schnellen Exponentiation richtig testen zu können. Deswegen wollte ich mich nur informieren um vielleicht selbst so etwas zu schreiben falls ich genug Zeit hätte, damit ich nicht unbedingt auf die Bigint Klasse der LiDIA Gruppe zurückgreifen müsse um das zu testen.

schönen Dank auch.

Hallo Torsten,

um mal was konstruktives beizutragen: In CodeGuru.com wird eine Klasse behandelt, die Dir evt. weiter helfen kann. Allerdings ist die Seite in Englisch:
http://www.codeguru.com/algorithms/Calc.html

Gruß
Uwe

So ziemlich jedes Computeralgebraprogramm kann
das. Drei Zusätzliche „Zahlen“ Inf, -Inf, NaN
Inf=unendlich
NaN=Not a Number (Nicht definiert)

folgende zusätzlich Rechenvorschriften:

Inf+Inf=Inf
Inf*Inf=Inf
Inf hoch Inf = Inf
zahl*Inf=Vorzeichen(zahl)*Inf
Inf-Inf=NaN
Inf/Inf=NaN

besondere Funktionen:
exp(Inf)=inf
sin(Inf)=NaN
cos, tan dito
log(Inf)=Inf

Gruss, Marco