- Tam Sayı Tipleri
- Reel Tipler (double, float)
- Karmaşık sayı (complex)
- String Tipi
- Yapılar, Sınıflar ve Arayüzler
- Dinamik Dizi Nesnesi
- Matrisler ve vektörler
- Tip Dönüşümü
- Void Tipi ve NULL Sabiti
- Kullanıcı Tanımlı Tipler
- Nesne İşaretçileri
- Referanslar: Şekillendirici & ve Anahtar Sözcük this
Reel Tipler (double, float)
Reel tipler (yada kayan noktalı tipler) ondalık kısımları olan değerleri temsil eder. MQL5 dilinde kayan nokta sayıları için iki farklı tip mevcuttur. Bilgisayar hafızasında reel sayıların temsil yöntemi IEEE 754 standardı ile tanımlanır ve platformlardan, işletim sistemlerinden ve programlama dillerinden bağımsızdır.
Tip |
Bayt bazında büyüklük |
Minimal Pozitif Değer |
En büyük değer |
C++ Analog |
---|---|---|---|---|
float |
4 |
1.175494351e-38 |
3.402823466e+38 |
float |
double |
8 |
2.2250738585072014e-308 |
1.7976931348623158e+308 |
double |
double
double gerçek sayı türü 64 bit (1 işaret biti, 11 üs biti ve 52 mantis biti) kaplar.
float
float gerçek sayı türü 32 bit (1 işaret biti, 8 üs biti ve 23 mantis biti) kaplar.
vector
double türünde sayılardan oluşan tek boyutlu dizidir. Veriler için bellek dinamik olarak tahsis edilir. Metotlar kullanılarak vektör özellikleri elde edilebilir ve vektör büyüklüğü değiştirilebilir. Şablon fonksiyonlarında vector<double> girdisi kullanılabilir.
vectorf
Hassasiyet kaybı önemli değilse, vector yerine float türünde sayılardan oluşan tek boyutlu dizi olan vectorf kullanılabilir. Şablon fonksiyonlarında vector<float> girdisi kullanılabilir.
vectorc
complex türünde sayılardan oluşan tek boyutlu dizidir. Karmaşık sayıların işlenmesi içindir. Şablon fonksiyonlarında vector<complex> girdisi kullanılabilir. vectorc türündeki vektörler üzerinde işlemler henüz tanımlanmamıştır.
matrix
double türünde sayılardan oluşan iki boyutlu dizidir. Veriler için bellek dinamik olarak tahsis edilir. Metotlar kullanılarak matris özellikleri elde edilebilir ve matris şekli değiştirilebilir. Şablon fonksiyonlarında matrix<double> girdisi kullanılabilir.
matrixf
Hassasiyet kaybı önemli değilse, matrix yerine float türünde sayılardan oluşan iki boyutlu dizi olan matrixf kullanılabilir. Şablon fonksiyonlarında matrix<float> girdisi kullanılabilir.
matrixc
complex türünde sayılardan oluşan iki boyutlu dizidir. Karmaşık sayıların işlenmesi içindir. Şablon fonksiyonlarında matrix<complex> girdisi kullanılabilir. matrixc türündeki vektörler üzerinde işlemler henüz tanımlanmamıştır.
double ismi, bu sayıların çözünürlüğünün float tipli sayıların iki katı olmasından gelir. Çoğu durumda double tipi en uygun olandır. Çoğu durumda ise float sayıların sınırlı çözünürlükleri yetersizdir. float tipinin hala kullanılmasının sebebi bellek tasarrufudur (bu, geniş reel sayı dizileri için önemlidir).
Kayan noktalı sabitler bir tamsayı kısmı, bir nokta (.) ve bir ondalık kısımdan oluşur. Tamsayı ve kesirli kısımlar, ondalık sayı dizileridir.
Örnekler:
double a=12.111;
|
Reel sabitleri yazmanın bilimsel bir yolu vardır ve bu kayıt yöntemi çoğunlukla geleneksel yöntemden daha derli topludur.
Örnek:
double c1=1.12123515e-25;
|
Reel sayıların ondalık notasyon kullanılırken bellek üzerinde ikili sistemde ve sınırlı kesinlikle depolandığı hatırlanmalıdır. Bu, ondalık sistemde tam olarak temsil edilen birçok sayının, ikili sistemde sadece sonsuz bir kesir olarak yazılmasını açıklar.
Örneğin, 0.3 ve 0.7 sayıları, bilgisayarda sonsuz bölümlerle temsil edilirken, 0.25 tam olarak saklanır, çünkü ikinin kuvvetini temsil eder.
Bu yüzden, iki reel sayının eşitliklerinin kontrolü için karşılaştırılma yapılması tavsiye edilmez; böyle bir karşılaştırma doğru değildir.
Örnek:
void OnStart()
|
Eğer hala iki reel sayıyı karşılaştırmak istiyorsanız bunu iki şekilde yapabilirsiniz. İlk yol, iki sayı arasındaki farkı karşılaştırmanın doğruluğunu belirleyecek küçük bir meblağ ile karşılaştırmaktır.
Örnek:
bool EqualDoubles(double d1,double d2,double epsilon)
|
Yukarıdaki örnekteki epsilon değerinin, ön tanımlı sabit DBL_EPSILON değerinden küçük olamayacağını not edin. Bu sabitin değeri 2.2204460492503131e-016 sayısına eşittir. Float tipine karşılık gelen sabit FLT_EPSILON = 1.192092896e-07 sayısıdır. Bunlar şu anlama gelir: Bu değer, 1.0 + DBL_EPSILON koşulunu sağlayan en düşük değerdir! = 1.0 (float tipli sayılar için 1.0 + FLT_EPSILON! = 1.0).
İkinci yol, iki reel sayının normalleştirilmiş farklarını sıfırla karşılaştırmayı önerir. Normalleştirilmiş farkın sıfır ile karşılaştırılması anlamsızdır. Normalleştirilmiş sayılarla yapılan tüm matematiksel işlemler normalize olmayan sonuçlar verirler.
Örnek:
bool CompareDoubles(double number1,double number2)
|
Matematiksel yardımcı işlemcinin bazı işlemleri geçersiz reel sayı ile sonuçlanabilir. Böyle bir sonuç matematiksel işlemlerde ve karşılaştırmalarda kullanılamaz, çünkü geçersiz reel sayılarla yapılan işlemlerin sonucu tanımsızdır. Örneğin, arcsin(2) değerini hesaplamaya çalıştığımızda sonuç negatif sonsuz olur.
Örnek:
double abnormal = MathArcsin(2.0);
|
Eksi sonsuzun yanında, artı sonsuz ve NaN (not a number: bir sayı değil) bulunmaktadır. Sayının geçersiz olup olmadığını öğrenmek için MathIsValidNumber() fonksiyonunu kullanabilirsiniz. IEEE standardına göre, bunlar özel makine temsiline sahiptirler. Örneğin, double tip için artı sonsuz değeri 0x7FF0 0000 0000 0000 şeklinde bit temsiline sahiptir.
Örnekler:
struct str1
|
Ayrıca Bakınız