INT

Aus C64-Wiki
Zur Navigation springenZur Suche springen
INT
Syntax: INT(<Ausdruck>)
Parameter
<Ausdruck>: numerischer Ausdruck
Einordnung
Typ: numerische Funktion
Kontext: Arithmetik
Aufgabe: Umwandlung in eine Ganzzahl ohne Nachkommastellen
Abkürzung: -
Token: $b5 (181)
Verwandte Befehle

Anmerkung: Dieser Artikel beschreibt die numerische Funktion INT unter BASIC V2 des Commodore 64.


Die BASIC-Funktion INT() befreit (vereinfacht) eine Zahl von ihren Nachkommastellen. Genauer betrachtet wird eine gegebene Zahl in einen ganzzahligen Wert umgewandelt, wo jener Anteil der Zahl, der kleiner als 1 ist entfernt wird (entspricht also dem Dezimalanteil von Zahlen, die nicht in Exponentialdarstellung sind). Dabei ist das Ergebnis stets die nächstkleinere Ganzzahl, was im Falle von negativen Werten zur absolut größeren Zahl führt (ist also in diesem Fall nicht das simple Abtrennen der Nachkommastellen!). Dies entspricht einer Abrundungsfunktion.
Dieses Verhalten existiert auch implizit bei Zuweisungen von Ausdrücken an Integer-Variablen - diese Funktion wird auch sonst nicht für den Umgang mit Integer-Variablen benötigt.

Der Effekt der Entfernung der Nachkommastellen ist nur sichtbar, solange das Ergebnis (wegen der beschränkten Mantisse von Fließkommazahlen) noch als Ganzzahl darstellbar ist. Ab 999999999.6 und größer wird 1E+09 und im negativen Bereich ab -999999999.0 und kleiner wird -1E+09 dargestellt. Der positive Grenzfall verhält sich dabei entgegen des sonst üblichen Abrundens.

Um statt dem Abrunden das übliche Rundungsverhalten (ab 0,5 aufrunden, sonst abrunden) zu erreichen, ist ein Addieren von 0,5 zur Ausgangszahl notwendig. Siehe Beispiele.

Ist das Argument keine Zahl, so erscheint die BASIC-Fehlermeldung ?TYPE MISMATCH ERROR. Nur Zahlen aus dem Wertebereich -1e+38 bis 1e+38 werden verarbeitet, sonst wird die BASIC-Fehlermeldung ?OVERFLOW ERROR ausgegeben. Fehlt das numerische Argument, so erscheint ?SYNTAX ERROR.

Beispiele[Bearbeiten | Quelltext bearbeiten]

PRINT INT(1.53)   Auf dem Bildschirm wird 1 ausgegeben
PRINT INT(-9.47)  Auf dem Bildschirm wird -10 ausgegeben

Für korrektes Runden: 0,5 zur Ausgangszahl addieren:

PRINT INT((1.53)+0.5)   Auf dem Bildschirm wird 2 ausgegeben
PRINT INT((-9.47)+0.5)  Auf dem Bildschirm wird -9 ausgegeben

Positiver Grenzfall:

PRINT INT(999999999.5)   Auf dem Bildschirm wird 999999999  ausgegeben
PRINT INT(999999999.6)   Auf dem Bildschirm wird 1E+09  ausgegeben, obwohl 999999999 zu erwarten wäre

Negativer Grenzfall:

PRINT INT(-999999998.9)   Auf dem Bildschirm wird -999999999  ausgegeben
PRINT INT(-999999999.0)   Auf dem Bildschirm wird -1E+09  ausgegeben

Sehr große oder kleine Zahlen (Exponentialdarstellung):

PRINT INT(1.2345678E+20)   Auf dem Bildschirm wird der Wert unverändert ausgegeben - die Kommastellen bleiben!

Kaufmännisch runden: π auf 3 Nachkommastellen:

PRINT INT((3.14159265*1000)+0.5)/1000   Auf dem Bildschirm wird 3.142 ausgegeben

FRAC-Implementierung[Bearbeiten | Quelltext bearbeiten]

Mit dieser Funktionsdefinition für die in BASIC V2 fehlende Implementierung der zu INT verwandten FRAC-Funktion kann der ganzzahlige Anteil einer Zahl entfernt bzw. nur die Nachkommastellen einer Zahl ermittelt werden:

10 DEF FN FRAC(X) = X-SGN(X)*INT(ABS(X))
20 DEF FN SFRAC(X) = X-INT(X)
30 PRINT  π;INT( π);FN FRAC( π);FN SFRAC( π)
40 PRINT -π;INT(-π);FN FRAC(-π);FN SFRAC(-π)
 3.14159265  3  .141592653  .141592653
-3.14159265 -4 -.141592653  .858407347

FN FRAC() ist allgemein gültig, während FN SFRAC() (Simple Frac) nur für positive Werte stimmt.
Der Teil nach dem Minus in der FRAC-Funktion entspricht der FIX-Funktion wie im Beispiel FIX-Implementierung dargestellt.

FIX-Implementierung[Bearbeiten | Quelltext bearbeiten]

Diese Funktionsdefinition für die in BASIC V2 fehlende Implementierung der FIX-Funktion (z. B. im GW-BASIC Emulator vorhanden) ermittelt den ganzzahligen Anteil einer Zahl, entfernt also die Nachkommastellen:

10 DEF FN FIX(X) = SGN(X)*INT(ABS(X))
30 PRINT  π;INT( π);FN FIX( π)
40 PRINT -π;INT(-π);FN FIX(-π)
 3.14159265  3  3
-3.14159265 -4 -3