Hochgenaue Integer-Funktionen des HP 49G

Große Integerzahlen mit > 8000 Stellen auf dem Taschenrechner!

Die hier verwendete Notation ist in einem gesonderten Beitrag zusammengestellt.

Bekannte Zahlenformate beim HP 49G

Der normale Computer beherrscht außer den durch die Wortlänge des Prozessors beschränkten Bereich der Integerzahlen auch Dezimalzahlen (reelle Zahlen, Zahlentyp REAL) mit Mantisse und Exponent. Diese halblogarithmische Darstellung bestimmt die Genauigkeit der Berechnungen und den darstellbaren Zahlenbereich. Der HP 49G bewältigt damit den Zahlenbereich 10.-500 < a < 10.+500, wobei a eine Dezimalzahl ist.

Ganze Zahlen werden jedoch innerhalb des HP-Taschenrechners anders dargestellt. Der HP 48GX und der HP 49G kennen den Zahlentyp "Binärganzzahlen". Diese interne Darstellung verwendet das Dualsystem mit der Zahlenbasis 2 (siehe dazu auch den Beitrag "Zahlensysteme"). Die Größe der darstellbaren Zahl wird von der Anzahl der Stellen (Bits) bestimmt, die beim Taschenrechner über die Flags -5 bis -10 oder über den Befehl STWS als Wortlänge einstellt werden. Anzeigen kann man diese Integerzahlen als Dualzahl (Binärzahl, Einstellung BIN), als Oktalzahl (Einstellung OCT), als Dezimalzahl ohne Kommastellen (Einstellung DEC) und als Hexa-Zahl (Einstellung HEX).

Zum Beispiel kann man mit 3 Bits die ganzen Zahlen in dezimalem Format # 0d bis #7d, mit 4 Bits #0d bis #15d und mit den 64 Bits des Taschenrechners #0d bis #18446744073709551615d (oder als Hexazahl #0h bis #FFFFFFFFFFFFFFFFh) darstellen. Größere Binärganzzahlen lassen sich damit nicht darstellen.

Das Arbeiten mit diesen Binärganzzahlen ist im HP 49G Advanced User's Guide im Kapitel 8 ausführlich beschrieben.

Neu beim HP 49G: Große Integerzahlen im Dezimalformat

Der HP 49G beherrscht jedoch auch Ganzzahlen im Dezimalformat (ohne Dezimalzeichen), die wesentlich mehr Stellen umfassen als mit 64 Bit darstellbar sind, hier in diesem Beitrag werden sie große Integerzahlen genannt. Gemeint sind damit Zahlen mit mehr als 20 Stellen. Am Schluß des Beitrags einige eindrucksvolle Beispiele.

Der HP 49G stellt diese großen Integerzahlen dezimal dar, also in dem uns geläufigen Zahlensystem. Dieser Darstellung liegt eine eigene Integerarithmetik zugrunde. Diese Darstellung außerhalb des Binärformates #...d ist neu, der HP 48GX kennt diese großen Integerzahlen nicht. Die Funktion STD hat beim HP 48GX die Folge, daß ganze Dezimalzahlen mit Dezimalzeichen zu Ganzzahlen werden. Beim HP 49G funktioniert dies etwas anders, obwohl die Funktion STD identisch zum HP 48GX beschrieben ist.

Bestimmte Funktionen funktionieren auch mit den großen Integerzahlen. Das sind z. B. die Funktionen yx, x!, x2, sowie die Addition, Subtraktion, Multiplikation und Division von Integerzahlen, soweit sich durch diese Funktionen ganze Zahlen ergeben. Ergeben sich dadurch keine ganze Zahlen, wird ein "Overflow" oder "Integer too large" gemeldet. Auch die Wurzelfunktion arbeitet bei großen Quadratzahlen einwandfrei.

Zusätzlich gibt es spezielle Integerfunktionen:
Zwei Beispiele:
IDIV2 liefert den ganzzahligen Quotienten und den Rest einer Division zweier großer Integerzahlen.
IREMAINDER liefert den Teilungsrest einer Division zweier großer Integerzahlen.

Durch Probieren findet man heraus, daß der HP 49G durchaus Integerzahlen berechnen und darstellen kann, die mehr als 8000 Stellen haben können.

Der Umgang mit diesen großen Integerzahlen

Nachdem man diese Möglichkeiten durch Probieren herausfinden muß, weil sie dem normalen HP49G-Käufer nicht in den Handbüchern bekanntgegeben werden, wird es eine Weile dauern bis man alles darüber weiß.

Hier nur einige wenige Hinweise:
Diese großen Zahlen können über die VIEW-Funktion oder die EDIT-Funktion [Cursor down] gelesen werden. Sie werden auf dem LCD-Bildschirmchen dargestellt und müssen über die EDIT-Funktion gelesen werden, wobei man mit den Cursortasten vom Anfang zum Ende [shiftright][>] und wieder zurück [shiftright][<] springen kann. Wenn man ein große Integerzahl in eine Zeichenkette (String) umwandelt (diese Zahl einfach zu einem leeren String " " addieren oder ->STR ausgeführen), kann man die Stringfunktionen (siehe Beitrag "Zeichenketten") darauf anwenden.

Das Kopieren durch [ENTER] in die nächste Stackebene und die anderen Funktionen (wie SWAP) werden sehr träge ausgeführt, weil diese Zahlen sehr groß sind, viel Speicherplatz brauchen und das "Hin- und Herschaufeln" der Zahlen im Speicher Zeit verschlingt..

Die Batterien des HP 49G werden durch diese Berechnungen sehr strapaziert. Man muß darauf achten, daß die Batterien ausreichend Kapazität haben oder bei Verwendung von Akkus diese frisch geladen sind.

Einstellungen

Die Flags -2 und -3 müssen auf "symbolisch" eingestellt (zurückgesetzt = 0) sein,
Flag -105 muß auf den "exakten" Modus eingestellt (zurückgesetzt = 0) sein.

Wenn die Flags -2 und -3 gesetzt (=1) sind, gibt es Fehlermeldungen bei der Berechnung von großen Integerzahlen. Wird der Näherungsmodus verwendet, so werden alle Zahlen und Ergebnisse, die größer als der Darstellungsbereich der reellen Zahlen sind, angemeckert und entsprechende Fehlermeldungen ausgegeben.

Alle Versuche und Beispiele wurden im RPN-Modus durchgeführt.

Beispiele:

21000 ergibt eine Zahl mit 302 Stellen (siehe Textbox):

10715086071862673209484250490600018105614048117055
33607443750388370351051124936122493198378815695858
12759467291755314682518714528569231404359845775746
98574803934567774824230985421074605062371141877954
18215304647498358194126739876755916554394607706291
45711964776865421676604298316526243868372056680693
76

25000 ergibt eine Zahl mit 1506 Stellen (Stellenanzahl = 5000·log 2)

Die Fakultät der Zahl 1000 wird ebenfalls klaglos berechnet und dargestellt: 1000! = 1·2·3·4·... ·999·1000. Allerdings braucht der HP 49G mit der eingebauten x!-Funktion dazu etwa 61 Sekunden. Man kann aber auch eine FOR-NEXT-Schleife von 1 bis 1000 programmieren und 1·2·3·4·... ·999·1000 ausrechnen lassen. Dann dauert es etwas länger. Das Ergebnis ist eine Zahl mit 2568 Stellen. Diese Information findet man über den Befehl SIZE, wenn die Zahl vorher in den Stack gestellt wird.

79999 ergibt eine Zahl mit 8451 Stellen (Berechnungsdauer etwa 353 Sekunden). Die ersten 20 Stellen und die letzten 20 Stellen dieser Zahl sind im nachfolgenden Kästchen dargestellt:

13655326938206299575.....58935601930400857143

wobei die mittleren 8411 Stellen durch Punkte angedeutet dargestellt werden.

Bei dem Versuch, 710000 direkt einzugeben, streikt der Rechner (Integer too large). Berechnet man aber die Zahl 79999·7, so ergibt sich sofort das richtige Ergebnis für 710000. Vermutlich ist nur der Eingabebereich der Funktion yx auf x<10000 beschränkt. Man kann zur Probe das Ergebnis der Zahl 710000 wieder durch 7 teilen, es ergibt sich wieder die vorherige Zahl.

Der Autor hat es sogar geschafft, mit der vorher berechneten Zahl 79999 das Produkt 79999·79999 (nach einer weiteren Berechnungszeit von fast ¼ Stunde) zu erhalten, es ist eine Zahl mit 16901 Stellen. Diese Zahl wurde dann nochmals mit 7·7 multipliziert und damit die Zahl 720000 berechnet (16902 Stellen). Dabei waren die Grenzen des Rechners noch nicht erreicht. Vermutlich hängen diese nur vom verfügbaren Speicherplatz ab.

Primzahlfunktionen

Auf die großen Integerzahlen können auch alle Primzahlfunktionen angewandt werden. Jede Integerzahl kann durch die Funktion FACTOR in ihre Primfaktoren oder Potenzen der Primfaktoren zerlegt werden. Der Befehl FACTORS ist ähnlich, er gibt jedoch die Primfaktoren und die zugehörigen Exponenten als Liste zurück.

Beispiel: Die Zahl 35373204842494575269664 wird durch FACTOR zerlegt in 25·37·1117. Der Befehl FACTORS liefert für diese Zahl eine Liste {11 17. 3 7. 2 5.}, wobei der Exponent jeweils durch einen Punkt gekennzeichnet ist.

Über die Funktion ISPRIME? kann abgefragt werden, ob die Integerzahl eine Primzahl ist. Die Funktionen NEXTPRIME und PREVPRIME liefern die nächste oder vorhergehende Primzahl einer bestimmten Integerzahl.

Beispiel: Für die oben verwendete Zahl 35373204842494575269664 ergibt sich die davorliegende Primzahl zu 35373204842494575269593 und die darauffolgende zu 35373204842494575269677, wobei nur die letzten drei Stellen unterschiedlich sind.

Bei großen Zahlen mit mehreren hundert Stellen muß man Geduld haben, manche Berechnungen laufen sehr lange, ¼ bis ½ Stunde sind keine Seltenheit.

Dokumentation

Der HP 49G ist der einzige Taschenrechner, den der Autor kennt, der hochgenaue Integerfunktionen und große Integerzahlen mit so großer Stellenanzahl auf Tastendruck berechnen und handhaben kann (beim TI-89 ist bei 614 Stellen Schluß: z.B. bei der Zahl 22039 bzw. 7726).

Beim PC müssen hierfür eigene HGN-Algorithmen (HGN = hochgenau) verwendet werden, um die CPU zu überreden, eine Arithmetik über eine vorgegebene Anzahl von Bytes durchzuführen und solche Zahlen zu beherrschen.

Undokumentiert:

Die Tatsache der Verarbeitung der großen Integerzahlen ist nicht dokumentiert. Es wird lediglich auf einer HP-Webseite erwähnt, daß beim HP 49G erweiterte Integerfunktionen verfügbar seien.


Zum Beginn dieser Seite
Zur Beitragsübersicht

Copyright © 2002 Otto Praxl
Alle Rechte vorbehalten!