Datentypen

Die Nutzung von Variablen ist in MATLAB sehr intuitiv. Dies liegt daran, dass MATLAB automatisch das korrekte Speicherformat für eine Variable erkennt. So wird ein Buchstabe als solcher gespeichert und eine Zahl mit einer standardmäßigen Genauigkeit.

 

Binäre Zahlen

Die gesamte Informationsverarbeitung im Computer baut auf den zwei binären Zuständen 0 und 1 auf. Somit ist jede im Computer angezeigte Zahl als binäre Zahl hinterlegt. Die Umrechnung von binären auf dezimale Zahlen erlernen Sie in der Vorlesung IKT, weshalb hier nicht näher darauf eingegangen wird.

Die kleinste Speichereinheit im Computer ist das Bit. Ein Bit kann die zwei Zuständen 0 oder 1 besitzen. Somit lässt sich mit dem Speicherbereich eines Bits speichern, ob eine Aussage wahr oder falsch ist. True wäre dabei 1 und False 0. Diesen Datentyp nennt man Boolean.

Die nächste typische Größe ist das Byte. Ein Byte besteht aus 8 Bit. Somit reicht es von 00000000 bis 11111111. In dezimalen Zahlen ausgedrückt von 0 bis 255. Es können also 28 (256) Zahlen dargestellt werden. Es ist zu beachten, dass die Null mitgezählt wird und somit der höchste darstellbare Wert nicht der Anzahl an darstellbaren Zahlen entspricht. (Mit einem Bit lassen sich 2 Zahlen darstellen (21) nämlich 0 und 1. Mit 2 Stellen lassen sich vier Zahlen darstellen (22) 0,1,2 und 3. Mit 3 Stellen 8 Zahlen (23) von 0 bis 7 usw.)

Typische Größen in der Datenspeicherung sind Vielfache des Bytes wie Kibibyte, Mebibyte, Gibibyte, Tebibyte und Pebibyte. Diese entsprechen 210 Byte= 1024 Byte, 220 Byte = 1024*1024 Byte, 230 Byte = 1024*1024*1024 Byte usw.

 

Vorsicht:

Vor einigen Jahren war es noch üblich, diese Werte als Kilobyte, Megabyte, Gigabyte und Terabyte zu bezeichnen. Die Bezeichnungen sind jedoch für das Dezimalsystem genormt. Das machten sich z.B. Festplattenhersteller bei der Angabe der Speichergröße zunutze. 300 GB entsprachen nicht den erwarteten 300*1.073.741.824 Byte, sondern 300.000.000.000 Byte, was etwas mehr als 279 "echten" Gigabyte entspricht. Um diesem Problem entgegenzuwirken, wurden die präzisen Bezeichnungen Kibibyte, Mebibyte, Gibibyte, Tebibyte und Pebibyte eingeführt.

 

Datenspeicherung in Matlab

In MATLAB werden Integers, Fließkommazahlen und Characters verwendet.

Standardmäßig speichert MATLAB jede Zahl als Fließkommazahl mit double precision ab. Dies bedeutet, dass die Variable intern in folgendem Format vorliegt:

Die Speichergröße des Formats double ist 64bit, also 8 Byte.

Als Anhaltspunkt für die erzielbare Genauigkeit sei die kleinste Zahl, die noch größer als 1 ist, genannt, nämlich 1,0000000000000002.

Desweiteren wird ein großer Zahlenraum abgedeckt. Die genaue Herleitung des abgedeckten Zahlenraums und der erreichbaren Genauigkeiten kann in der IEEE 754 nachgelesen werden.

Neben der Repräsentation einer Zahl als double, kann auch die Form single gewählt werden.

Die Speichergröße des Formats single ist 32bit, also 4 Byte.

Für die Speicherung einer Ganzzahl bietet MATLAB das Format Integer an.

Das Format Integer speichert nur ganze Zahlen. Es ist möglich einen Integer vorzeichenbehaftet oder als rein positive Zahl zu speichern.

Das Format int64 steht für einen vorzeichenbehafteten Integer mit einer Speicherbreite von 64bit. Es kann damit der Zahlenraum von -263+1 bis 263-1 abdecken. 1bit wird für die Speicherung des Vorzeichens benötigt.

Im Format uint64 wird kein Vorzeichen gespeichert, womit 264-1 die größte darstellbare Zahl ist.

Es können folgende Integer in MATLAB verwendet werden: int8, int16, int32, int64 ; uint8, uint16, uint32, uint64

 

Konvertierung in MATLAB

Das Speicherformat double ist in MATLAB meist die richtige Wahl und muss nicht geändert werden. Bei effektiv nutzbaren 2 Gigabyte Arbeitsspeicher bei heute üblichen PCs ist der Speicherplatzverbrauch von 8 Byte nahezu zu vernachlässigen. Sollten jedoch sehr große Datenmengen gespeichert und verarbeitet werden, muss der Speicherplatzverbrauch des Programmes optimiert und eine optimale Speicherform gefunden werden. Im folgenden wird a, b und alle Elemente in c als double gespeichert.

 

>>a = 1.93412;

>>b = 20;

>>C = ones(1000,1000);


Mit dem Befehl whos() können die Daten zu einer Variable abgefragt werden.

 

>>whos

 

Sie sehen, dass a und b den gleichen Speicherplatzbedarf haben. Die von a benötigte Genauigkeit wird vom Format double deutlich überstiegen, so dass hier eine Speicherung in single sinnvoll ist. Bei b werden keine Nachkommastellen benötigt und es kann minimal als int8 gespeichert werden.

Betrachten Sie nun den von C belegten Speicherplatz: Es werden 8000.000 Bytes an Speicherplatz belegt, dies sind etwa 7,6MB. Der Bereich, in dem Sie sich Sorgen um den benötigten Speicherplatz machen müssen, liegt deutlich höher, jedoch sollte dies als mögliche Fehlerquelle in Erinnerung bleiben.

 

>>a_single = single(a);

>>b_int = int8(b);

>>C_int = int8(C);

>>whos



Auch bei Matrizen und Vektoren ist das Speicherformat anpassbar.