next up previous contents
Next: Operatoren und Funktionen Up: Arbeiten mit Jasymca Previous: Arbeiten mit Jasymca

Zahlen

Zahlen werden im üblichen Computerformat eingegeben: mit optionalem Dezimalpunkt und gegebenenfalls mit dezimalem Exponenten nach dem Buchstaben e (oder E). Die Zahlen $5364$ und $-1,723478265342\cdot 10^{12}$ gibt man also so ein:
>> 5364
ans = 5364
>> -1.723478265342e12
ans = -1.7235E12
Zumeist 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.723478265342E12
Als 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 $15$ Stellen im Dualsystem dargestellt:
>> format 2 15
>> -1.723478265342e12
ans = -1.1001000101001E40
Mit 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 $10^{15}$ 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: $10^{-8}$).

>> 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


next up previous contents
Next: Operatoren und Funktionen Up: Arbeiten mit Jasymca Previous: Arbeiten mit Jasymca
Helmut Dersch
2009-03-15