- Ganzzahlige Typen
- Realtypen (double, float)
- Komplexen Zahlen (complex)
- Typ string
- Strukturen, Klassen und Schnittstellen
- Objekt des dynamischen Arrays
- Matrizen und Vektoren
- Typenreduzierung
- Typ void und Konstante NULL
- Benutzerdefinierte Typen
- Objektanzeiger
- Referenzen. Modifikator& und Schluesselwort this
Realtypen (double, float)
Realtypen (Fliesspunkttypen) stellen die Werte mit Bruchanteil dar. In der Sprache MQL5 gibt es zwei Typen für Fliesspunktzahlen. Darstellungsart der Realzahlen im Computerspeicher ist vom Standard IEEE 754 bestimmt und hängt nicht von Plattformen, Operationssystemen und Programmiersprachen ab.
Typ |
Größe in Bytes |
minimale positive Größe |
Maximale Größe |
Analog in C++ |
---|---|---|---|---|
float |
4 |
1.175494351e-38 |
3.402823466e+38 |
float |
double |
8 |
2.2250738585072014e-308 |
1.7976931348623158e+308 |
double |
double
Der reelle Zahlentyp double belegt 64 Bits (1 Bit für das Vorzeichen, 11 für den Exponenten und 52 für die Mantisse) .
float
Der reelle Zahlentyp float belegt 32 Bits (1 Bit für das Vorzeichen, 8 für den Exponenten und 23 für die Mantisse) .
vector
Ein eindimensionales Array mit Zahlen des Typs double. Der Speicher für die Daten wird dynamisch zugewiesen. Die Vektoreigenschaften können mit den Methoden ermittelt werden, mit denen die Vektorgröße geändert werden. Der Ausdruck vector<double> kann für Template-Funktionen verwendet werden.
vectorf
Eindimensionales Array mit Zahlen des Typs float kann anstelle von vector verwendet werden, wenn die geringere Genauigkeit keine Rolle spielt. Der Ausdruck vector<float> kann für Template-Funktionen verwendet werden.
vectorc
Ein eindimensionales Array mit Zahlen des Typs complex für komplexe Zahlen. Der Ausdruck vector<complex> kann für Template-Funktionen verwendet werden. Operationen mit Vektoren vom Typ vectorc sind noch nicht implementiert.
matrix
Eine Matrix ist ein zweidimensionales Array mit Zahlen des Typs double. Der Speicher für die Matrixelemente wird dynamisch verwaltet. Die Matrixeigenschaften können mit den Methoden ermittelt werden, mit denen die Matrixform geändert werden können. Der Ausdruck matrix<double> kann für Template-Funktionen verwendet werden.
matrixf
Ein zweidimensionales Array mit Zahlen des Typs float kann anstelle von matrix verwendet werden, wenn die geringere Genauigkeit keine Rolle spielt. Der Ausdruck matrix<float> kann für Template-Funktionen verwendet werden.
matrixc
Ein zweidimensionales Array mit Zahlen des Typs complex ist für die Verarbeitung komplexer Zahlen gedacht. Der Ausdruck matrix<complex> kann für Template-Funktionen verwendet werden. Operationen mit Matrizen vom Typ matrixc sind noch nicht implementiert.
Name double bedeutet, dass die Genauigkeit dieser Zahlen um das Doppelte die Genaugkeit der Zahlen der Art float übertrifft. In meistens Faellen ist die Art double am bequemsten. Die begrenzte Genauigkeit der Zahle float ist oft nicht ausreichend. Der Grund, warum float noch verwendet wird, - Speicheroekonomie bei der Bewahrung (das ist sehr wichtig für grosse Felder der Realzahlen).
Konstanten mit Fliesspunkt bestehen aus dem ganzzahligen Teil, Punkt (.) und Bruchanteil. Ganzzahliger Teil und Bruchanteil stellen Folgen von Dezimalzahlen dar.
Beispiele:
double a=12.111;
|
Es gibt ein wissenschaftliches Schreibverfahren der Realkonstanten. Oft ist dieses Schreibverfahren kampakter, als das traditionelle.
Beispiel:
double c1=1.12123515e-25;
|
Man muss im Kopf behalten, dass Realzahlen im Bionaersystem mit begrenzter Genauigkeit gespeichert werden, während das allgemeinguelgige System Dezimalsystem ist. Darum können viele Zahlen, die genau im Dezimalsystem geschrieben werden, können im Dualsystem nur als Infinitesimalbruch geschrieben werden.
ZB. werden die Zahlen 0.3 und 0.7 im Computer als Infinitesimalbrueche vertreten, während die Zahl 0, 25 wird genau gespeichert, da es die Potenz der zwei ist.
In diesem Zusammenhang ist es nicht empfehlenswert, zwei Realzahlen miteinander zu vergleichen, weil dieser Vergleich nicht korrekt ist.
Beispiel:
void OnStart()
|
Wenn es aber notwendog ist, zwei Realzahlen miteinander zu vergleichen, kann es mit zwei Verfahren gemacht werden. Das erste Verfahren besteht im Vergleich des Differenzbetrages der zwei Zahlen mit irgendwelcher kleinen Größe, die die Genauigkeit des Vergleiches festlegt.
Beispiel:
bool EqualDoubles(double d1,double d2,double epsilon)
|
Es muss bemerkt werden, dass der Wert von epsilon im angeführten Beispiel nicht kleiner als der der internen Konstante DBL_EPSILON sein kann. Der Wert dieser Konstante ist 2.2204460492503131e-016. Für den Typ float ist die entsprechende Konstante FLT_EPSILON = 1.192092896e-07. Der Sinn dieser Werter besteht darin, dass es der minimale Wert ist, der der Bedingung entspricht 1.0+DBL_EPSILON != 1.0 (für die Zahlen float 1.0+FLT_EPSILON != 1.0).
Das zweite Verfahren setzt den Vergleich normalisierter Differenz von zwei Realzahlen mit dem Nullwert. Es ist sinnlos, Differenz normalisierter Zahlen mit Null zu vergleichen, denn im Ergebnis jeder mathemati schen Operation mit normalisierter Zahlen wird das Ergebnis nicht normalisiert.
Beispiel:
bool CompareDoubles(double number1,double number2)
|
Im Ergebnis einiger Operationen des mathematischen Coprozessors kann eine ungueltige Realzahl entstehen, die nicht in mathematischen Operationen und Vergleichsoperationen verwendet werden kann, denn das Ergebnis der Operationen mit ungueltigen Realzahlen ist nicht bestimmt. ZB beim Versuch arc sin 2 auszurechnen, bekommt man das Ergebnis minus Infinitaet.
Beispiel:
double abnormal = MathArcsin(2.0);
|
Ausser minus Infinitaet gibt es auch plus Infinitaet und NaN (keine Zahl). Um festzustellen, das diese Zahl ungueltg ist, kann man die funktion MathIsValidNumber() benutzen Nach Standard IEEE haben Sie spezielle Maschienendarstellung. ZB plus Infinitaet für den Typ double hat Bitdarstellung 0x7FF0 0000 0000 0000.
Beispiele:
struct str1
|
Sehen Sie auch
DoubleToString, NormalizeDouble, Konstanten der numerischen Datentypen