e (oder E). Die Zahlen >> 5364 ans = 5364 >> -1.723478265342e12 ans = -1.7235E12Zumeist werden diese intern als Gleitkomma-Datentypen angelegt (Double nach IEEE Standard 754). Angezeigt werden sie gerunded auf 5 Stellen, gerechnet wird aber mit der vollen Auflösung dieses Formats (15-16 Dezimalstellen). Durch Umschalten des Formats (
format long ) werden alle signifikanten Stellen angezeigt.
>> format long >> -1.723478265342e12 ans = -1.723478265342E12Als Erweiterung bietet Jasymca den Befehl
format Basis Anzahl,
mit dem die Anzeige in ein Zahlensystem mit beliebiger Basis und mit
beliebiger Anzahl signifikanter Stellen erfolgt.
So wird eine Zahl mit >> format 2 15 >> -1.723478265342e12 ans = -1.1001000101001E40Mit
format short wird die kurze Anzeige im Dezimalsystem
wiederhergestellt. Zu beachten ist, daß die format-Anweisung in keinem
Fall die interne Genauigkeit oder Darstellung der Zahlen beeinflußt.
Zahlen, die ohne Dezimalpunkt und Exponent eingegeben werden, und größer
als
sind, werden als exakte rationale Zahlen gespeichert. Diese
werden intern als Bruch zweier Ganzzahlen variabler Länge (Java Datentyp BigInteger)
dargestellt, die das Rechnen ohne jegliche Rundungsfehler ermöglicht.
Im folgenden Fall erzeugt die erste Eingabe eine
Gleitkommazahl, die zweite eine exakte Zahl.
>> 10000000000000001. ans = 1.0E16 >> 10000000000000001 ans = 10000000000000001
Jede Gleitkommazahl Z kann in eine exakte Zahl durch den Befehl rat(Z)
verwandelt werden. Die Umwandlung erfolgt durch Kettenbruch-Entwicklung
mit einer durch die Variable ratepsilon festgelegten Genauigkeit
(voreingestellt:
).
>> rat(0.33333333333333333) ans = 1/3
Operationen zwischen exakten und Gleitkommazahlen führen immer zu einer Umwandlung der Gleitkommazahl. Man kann also eine Rechnung rundungsfrei gestalten, indem man die erste Zahl ,,rationalisiert``.
>> 1/21/525/21/5*7*175*63*15-1 ans = -4.4409E-16 >> rat(1)/21/525/21/5*7*175*63*15-1 ans = 0
Umgekehrt werden durch den Befehl float(Z) Umwandlungen in das Gleitkommaformat
bewirkt. Beide Befehle funktionieren auch mit zusammengesetzten Datentypen,
etwa Polynomen oder Matrizen, deren Koeffizienten damit in einem Schritt
transformiert werden. Irrationale Funktionswerte exakter Zahlen und Konstanten wie pi
werden ebenfalls erst durch den float-Befehl in eine numerische Größe
verwandelt.
>> sqrt(2) ans = 1.4142 >> sqrt(rat(2)) ans = sqrt(2) >> float(ans) ans = 1.4142
Nützlich ist der exakte Datentyp vor allem bei instabilen Problemen, etwa beim Lösen von linearen Gleichungssystemen mit schlecht konditionierter Matrix. Ein extremes Beispiel sind die Hilbertmatrizen:
>> det( hilb(20)*invhilb(20) ) ans = 1 % richtig >> det( float(hilb(20))*float(invhilb(20)) ) ans = 1.6713E151 % ziemlich falsch
Imaginäre Zahlen werden duch ein
(ohne Leerzeichen) folgendes i oder j gekennzeichnet. Das
funktioniert auch, wenn die vordefinierten Konstanten i oder j
überschrieben wurden.
>> 2+3i ans = 2+3i