3. MQL4 dla początkujących. Część III.

3.7. Typy zmiennych: typy liczb zmiennoprzecinkowych

float

Ten typ służy do przechowywania liczb zmiennoprzecinkowych, tj. liczb z wartościami ułamkowymi, rozdzielonych znakiem dziesiętnym w postaci kropki. Minimalna dodatnia wartość: 1.175494351e-38, maksymalna: 3.402823466e+38. W pamięci zajmuje 4 bajty (32 bity).

double

Ten typ też służy do przechowywania liczb zmiennoprzecinkowych, tj. liczb z wartościami ułamkowymi, rozdzielonych znakiem dziesiętnym w postaci kropki. Minimalna dodatnia wartość: 2.2250738585072014e-308, maksymalna: 1.7976931348623158e+308. W pamięci zajmuje 8 bajtów (64 bitów).


Ograniczenia dokładności liczb typu float mogą być w wielu przypadkach niewystarczające. Dlatego proponowane jest stosowanie typu double. W niektórych przypadkach naukowy sposób zapisu liczb jest lepszy niż tradycyjny.

Kod 1
double d1 = 1.1;
double d2 = -555.4321;
double d3 = 0.0000001;

double d4 = 0.000000000000000000000000532123527;
double d5 = 5.32123527e-25; // naukowy sposób zapisu liczby


Pracując z liczbami zmiennoprzecinkowymi zapisuj cyfrę po znaku dziesiętnym, tj. 1.0 zamiast 1.

Jeśli będziesz potrzebował obliczyć liczbę zmiennoprzecinkową na podstawie liczb całkowitych, np. 1 podzielić na 2, to w MQL4 po znaku dziesiętnym napisz 0, tj. zamiast 1 wpisz 1.0, a zamiast 2 wpisz 2.0. Chciałbym żebyś wyrobił w sobie taki nawyk. W niektórych przypadkach brak 0 po znaku dziesiętnym może spowodować błędne obliczenia. Przeanalizuj poniższy kod skryptu.

Kod 2
#property strict
void OnStart()
  {
   double d1 = 1 / 2;     // 0.0
   double d2 = 1.0 / 2;   // 0.5
   double d3 = 1 / 2.0;   // 0.5
   double d4 = 1.0 / 2.0; // 0.5

   Print("d1 = ",d1,
         ", d2 = ",d2,
         ", d3 = ",d3,
         ", d4 = ",d4);
  }

Po uruchomieniu tego skryptu w logach terminala zobaczysz wpis 'd1 = 0.0, d2 = 0.5, d3 = 0.5, d4 = 0.5'. Widzisz, zmienna d1 jest równa 0.0, a nie 0.5. W obliczeniach d2, d3 i d4 jest obecna chociażby jedna liczba z 0 po kropce. W przypadku d1 miało miejsce ukryta konwersja typu double do typu int. W związku z tym tworząc zmienną double zapisz 0 po kropce. Jeśli pogrzebać w kodach źródłowych standardowych wskaźników MetaTrader 4 to można zobaczyć, że dla zmiennych typu double programiści MetaQuotes Software Corp. też zapisują 0 po kropce (rys 1).

Rys. 1. Typ double w kodzie źródłowym wskaźnika Bollinger Bands.