Hatalar, hatalar, sorular - sayfa 2939

 
x572intraday :
Tüm fiyatlar, beşinci ondalık basamağa kadar doğru olarak görüntülenir ve bir nedenden dolayı, aynı listedeki bir kişi şu şekilde görüntülemeye karar verdi: Neden bu dünyada? Bu bir hata mı yoksa sonuç tek bir görüşte mi taranmalı? Diyelim ki, onu PrintFormat veya fprint ile fırçalayacağım, ancak prensipte bu, bir sayının yanlış temsili değil mi?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Nikolai Semko , 2020.01.05 21:41

Bu soru her zaman gelir.
Herkes sürekli olarak IEEE 754 standardından bahseder, ancak çoğu zaman insanlar ya karmaşıklık ya da tembellik nedeniyle Wikipedia'ya gittiklerinde, bu standardın anlamını anlamadan ayrılırlar.

Bu gönderiye daha sonra başvurabilmek için bu standardı olabildiğince kısa ve basit terimlerle açıklamaya çalışmak için biraz zaman ayıracağım.


Yani çift tip 8 bayt = 64 bitten oluşur. ( yüzer 4 bayt = 32 bit)

Ve   çift sayı gösterimi ve yüzer 3 bileşenden oluşur: işaret ( işaret ), üs ve mantis  


ÇİFT:


BATMADAN YÜZMEK:

Doğal olarak, bu biçimde sayıların ondalık gösterimi yoktur, yalnızca ikili vardır.

  • İşaret 1 bittir. 0, + (artı) anlamına geliyorsa, 1 ise - (eksi) anlamına gelir.
  • Üs, 2 sayısının kuvvetini depolar. Float için -126 10 ila 127 10 ve çift için -1022 10 ila 1023 10 aralığında olabilir.
  • Mantis - sayının kendisinin ikili biçimde kesirli kısmı, bu ilk birim ve virgül dikkate alınmadan virgül ilk birimden sonra gelecek şekilde indirgenir


Sayıların ikili gösterimi ve ondalık sayılarla ilişkileri hakkında biraz bilgi:

2 4 = 10000 2 = 16 10

2 3 = 1000 2 = 8 10

2 2 = 100 2 = 4

2 1 = 10 2 = 2

2 0 = 1 2 = 1 10

2 -1 = 0,1 2 =(1/2) 10 = 0,5 10          

2 -2 = 0,01 2 = (1/4) 10 = 0,25 10

2 -3 = 0.001 2 = (1/8) 10 =   0.125 10

2 -4 = 0.0001 2 = (1/16) 10 =   0.0625 10

2 -5 = 0.00001 2 = (1/32) 10 =   0.03125 10

2 -6 = 0,00001 2 = (1/64) 10 = 0,015625 10

2 -7 = 0.0000001 2 = (1/128) 10 = 0.0078125 10

2 -8 = 0.00000001 2 = (1/256) 10 =   0.00390625 10

2 -9 = 0.000000001 2 = (1/512) 10 =   0,001953125 10

2 - 10 = 0.0000000001 2 = (1/1024) 10 =   0,0009765625 10

2 - 11 = 0.00000000001 2 = (1/2048) 10 =   0.00048828125 10

2 - 12 = 0.000000000001 2 = (1/4096) 10 =   0.000244140625 10

2 - 13 = 0.0000000000001 2 = (1/8192) 10 =   0.0001220703125 10

 

double türü için örnekler düşünün :

Örnek 1

Bir ondalık sayımız var: 891677.4025191

Bu sayı ikili biçimde temsil edilebilir:

11011001101100011101.0110011100001011011111011111000101000001111101110001110
(kim bakmak ister)

Belirli bir sayının mantisini, yalnızca virgül 19 bit sola hareket ettirerek (bu durumda) seçeriz, böylece ilk üniteden sonra gelir.

1. 10110011011000111010110011100001011011111011111000101 000001111101110001110

Ama elimizde sadece 52 bitlik bir mantis var. Yani ilk 52 anlamlı biti alıyoruz

Mantis = 10110011011000111010110011100001011011111011111000101

Üs = (19+1023) 10 = 10000010010 2   1023 10 (01111111111 2 ) ile toplama, 01111111111 2 sıfırdır, daha büyük olan her şey pozitif, daha az olan her şey negatiftir. Onlar. üs değerini geri almak için, 11 bitlik üs değerinden 1023 çıkarılmalıdır.

Toplamda 891677.4025191 numaramız double tipte şöyle görünecektir :

0    10000010010    10110011011000111010110011100001011011111011111000101

Ama o zamandan beri Bu ikili bir gösterim olduğundan, onu tam olarak ondalık sayıya çeviriyoruz:

891677.4025190 99996425211429595947265625 olacak


Örnek #2

Ondalık bir sayımız var: -0.00000145258556224114

Bu sayı ikili biçimde temsil edilebilir:

-0.000000000000000000110000101111101100111010110111010011010101001111001110

Belirli bir sayının mantisini, sadece virgül 20 haneyi sağa kaydırarak seçeriz, böylece ilk birimden sonra gelir.

1. 1000010111101100111010110111010011010101001111001110 * 2 -20

Mantis = 1000010111101100111010110111010011010101001111001110

Üs = (-20+1023) 10 = 0 1111101011 2

eksi işareti, ilk bitin 1 olduğu anlamına gelir.

Toplamda -0.00000145258556224114 sayımız çift tipte şöyle görünecektir:

1 0 1111101011 1000010111101100111010110111010011010101001111001110

Onu ondalık sayıya çevirelim:

-0.00000145258556224113 991124017968015191826225418481044471263885498046875 olacak



Sizin durumunuzda, sorun 0,01 sayısıyla ortaya çıkıyor, çünkü çift tipte şu şekilde temsil edilecektir:

0 01111111000 0100011110101110000101000111101011100001010001111011

ondalık basamağa dönüştürüldüğünde 0,01000000000000000020816681711721685132943093776702880859375'e eşittir 10

Sunum ile ise

3 10 = 1,5*2 = 1,1 2 *2 1

5 10 = 2,5*2 = 10,1 2 *2 1

6 10 = 1,5*4 = 1,1 2 *2 2

7 10 = 3,5*2 = 11,1 2 *2 1

sorun değil.

Neden çift 0,01 gerçekten 0,01'den daha büyük?

Bu yüzden:

0 01111111000 010001111010111000001101011110101110111011011101110110111011011011011101101101101110111011668171721681717216851329430937767028880859375 Hata = 0.000 000 000 000 000 208166817 ...

0 01111111000 01000111101011101101010001110101111011101011110110110111010110101111010101000111101 0 - 0.0099999999999999998473443341140409756911404097569175064563751220703125 Hata = - 0.000 000 000 000 001 52655666 ...

Bu süreç kimyasını anlamak için şu hesaplayıcılarla oynayabilirsiniz:
https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html

https://baseconvert.com/ieee-754-kayan nokta


https://baseconvert.com/ieee-754-kayan nokta


 

Teşekkürler, eğitici. Prensip olarak, bu MQ taranmalıydı, ancak taranmamalı mıydı yoksa karar özellikle kullanıcının kararına mı bırakılmıştı?

 

hm. Danışmanın parametrelerini kaydetme konusunda bir işlev veya başka bir ek işlev (kütüphane, kod) var mı?

Görev, ondeinit'e, örneğin bir sembol üzerinde bir danışman çalıştırırken (ek bir işlev hala dönemin analizidir), ayarlar dosyası kümesini kaydedecek bir kod koymaktır.

Örneğin - danışman-sembol-döneminin adı.

Yeniden yazılabilir dosya - yalnızca en son karakter ayarları gereklidir.

Örneğin, varsayılan olarak test cihazı, son çalıştırma için ayarları kaydeder.

 
tünaydın. sorun uzak bilgisayarda, MQL5 web sitesine ulaşamıyorum, bu nedenle satın alınan göstergeyi indiremiyorum. kimse karşılaşabilir mi
 
Slava Botalov :
tünaydın. sorun uzak bilgisayarda, MQL5 web sitesine ulaşamıyorum, bu nedenle satın alınan göstergeyi indiremiyorum. kimse karşılaşabilir mi


ve Zomro'daki uzak bilgisayar?

 
x572intraday :

Teşekkürler, eğitici. Prensip olarak, bu MQ taranmalıydı, ancak taranmamalı mıydı yoksa karar özellikle kullanıcının kararına mı bırakılmıştı?

Yani anlamadılar.
Hata yok.
Her şey olması gerektiği gibi.
 
Vladislav Andruschenko :


ve Zomro'daki uzak bilgisayar?

Evet

 
Slava Botalov :
tünaydın. sorun uzak bilgisayarda, MQL5 web sitesine ulaşamıyorum, bu nedenle satın alınan göstergeyi indiremiyorum. kimse karşılaşabilir mi
Vladislav Andruschenko :


ve Zomro'daki uzak bilgisayar?

Slava Botalov'un fotoğrafı.

Evet


Bu sağlayıcı ağır ihlaller nedeniyle engellendi:  

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

www.mql4.com'a erişim neden kapalı?

Renat Fatkhullin , 2020.11.17 12:16

***

Alt ağlara sahip tüm Zomro sağlayıcısı, alt ağlarından gelen büyük çaplı dolandırıcılık faaliyetleri nedeniyle engellenir.

***
 
Nikolai Semko :
Yani anlamadılar.
Hata yok.
Her şey olması gerektiği gibi.

Bu, onunla alakalı değil. Soru şu ki, özellikle bir programcı için değil, bir tüccar için nerede kullanışlı olabilir? Terminalde ne fiyat skalasında ne de sipariş verme penceresinde böyle sayılar görmedim, her şey her yerde tek bir forma getiriliyor (beş haneli bir yerde, başka bir yerde gibi).

 
Vladimir Karputov :


Bu sağlayıcı ağır ihlaller nedeniyle engellendi:

kötü, diğerine geçmek zorunda kalacak. Baska öneri ?