FPWRT

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Anmerkung: Dieser Artikel beschreibt die numerische FPWRT-Routine zur Berechnung von Potenzen im BASIC-ROM.

Name: FPWRT
Beschreibung: Fließkommaregister ARG mit Fließkommaregister FAC potenzieren und Resultat in FAC speichern
Einsprungpunkt: $BF7B / 49019
Übergebene Argumente:
Rückgabe-Werte:


FPWRT — manchmal auch als POTAFC[1], HOCH[2], POTRAD[3] oder einfach als Potenzierung[4] bezeichnet — potenziert den im Fließkommaregister ARG befindlichen Wert mit dem Inhalt des Fließkommaregisters FAC.

Nach dem Aufruf steht in FAC die errechnete Potenz, während der Inhalt von ARG undefiniert ist. Ist das Ergebnis der Berechnung zu groß für die Fließkommadarstellung des C64, so löst FPWR einen ?OVERFLOW ERROR aus. Falls versucht wird, eine negative Zahl mit einem nicht ganzzahligen Exponenten zu potenzieren, so meldet FPWR einen ?ILLEGAL QUANTITY ERROR.

Neben dem Inhalt der Fließkommaregister FAC und ARG ändert FPWRT auch den Hilfszeiger an Adresse 34/$22 (Low-Byte) und 35/$23 (High-Byte) und die Hilfsregister an den Adressen 38/$26 bis 41/$29 sowie 78/$4E bis 82/$52 sowie die Fließkommaregister FAC#3 und FAC#4 an den Adressen 87/$57 bis 96/$60.

Verwendung

FPWRT ist eigentlich keine eigenständige ROM-Routine. Vielmehr ergibt sich ihr Einsprungpunkt dadurch, dass auf die Startadresse der Routine FPWR ein Offset von 3 aufaddiert und dadurch der Aufruf der Routine MOVFM zu Beginn von FPWR ausgelassen wird.

Bei der Nutzung von FPWRT ist zu beachten, dass sich die Routine auf einen Seiteneffekt von MOVFM verlässt. Das Zero-Flag muss genau dann gesetzt sein, wenn im Fließkommaregister FAC der Wert 0 gespeichert ist, denn bei gesetztem Zero-Flag springt FPWRT direkt zur ROM-Routine EXP und berechnet somit die natürliche Exponentialfunktion von FAC. Dies lässt sich am einfachsten dadurch erreichen, dass man vor dem Aufruf von FPWRT den Exponenten von FAC mit dem folgenden Befehl in den Akkumulator lädt:

LDA *$61

Algorithmus

Der von FPWRT verwendete Algorithmus sowie das Laufzeitverhalten sind ausführlich in der Beschreibung von FPWR dokumentiert. Bei den dort angegebenen Rechenzeiten ist lediglich zu beachten, dass selbstverständlich die Laufzeit der Routine MOVFM (76 Systemtakte) bei der Verwendung von FPWRT nicht anfällt.

Weblinks


Quellen