Double vs FLOAT - anlaşılmaz MathFloor hatası - sayfa 4

 
Andrey Dik :
float, herhangi bir avantaj sağlamayan sayıların hadım edilmesidir. Dönüşümlerdeki tüm kayıplarla daha iyi başa çıkın ve mümkün olan en yüksek hassasiyeti kullanın - iki katı.
Teşekkür ederim. Nerede hata yaptığımı bulmaya çalışacağım. Bu arada, float pah pah çalışır. Başladığım şeyi bırakmaya alışık değilim. Ama bu hata beni çıkmazdan kurtardı.
 
Vladislav Andruschenko :
Teşekkür ederim. Nerede hata yaptığımı bulmaya çalışacağım. Bu arada, float pah pah çalışır. Başladığım şeyi bırakmaya alışık değilim. Ama bu hata beni çıkmazdan kurtardı.
Tabii ki, bu bir usta işidir, ancak TÜM standart matematiksel fonksiyonların çift sayılarla çalıştığına ve çift sonuç ürettiğine dikkat edin. Bu işlevleri kayan sayılara uygularken, yine de çifte dahili bir dönüşüm gerçekleşir, bu nedenle her durumda elde edilen sonuçların doğruluğunu ve güvenilirliğini kaybedersiniz.

Şahsen, asla hesaplamalarda kullanmam ve sayıları karşılaştırırken, farkı kabul edilen minimum bir değerle karşılaştırırken, her zaman 16. basamağa kadar mümkün olan en yüksek doğrulukla çalışırım ve sadece en son işlemde normalleştirme yaparım. Double'nin doğru kullanımıyla, yapmanızı tavsiye ettiğim hiçbir sorun yoktur, aksi takdirde bazı hesaplama / dönüştürme adımlarında doğruluk kaybıyla ilişkili sonuçların bozulmasında ince sorunlarla karşılaşırsınız.
 
Andrey Dik :
Tabii ki, bu bir usta işidir, ancak TÜM standart matematiksel fonksiyonların çift sayılarla çalıştığına ve çift sonuç ürettiğine dikkat edin. Bu işlevleri kayan sayılara uygularken, yine de çifte dahili bir dönüşüm gerçekleşir, bu nedenle her durumda elde edilen sonuçların doğruluğunu ve güvenilirliğini kaybedersiniz.

Şahsen, asla hesaplamalarda kullanmam ve sayıları karşılaştırırken, farkı kabul edilen minimum bir değerle karşılaştırırken, her zaman 16. basamağa kadar mümkün olan en yüksek doğrulukla çalışırım ve sadece en son işlemde normalleştirme yaparım. Double'nin doğru kullanımıyla, yapmanızı tavsiye ettiğim hiçbir sorun yoktur, aksi takdirde bazı hesaplama / dönüştürme adımlarında doğruluk kaybıyla ilişkili sonuçların bozulmasında ince sorunlarla karşılaşırsınız.
Detaylı cevap için teşekkürler.
 

2017'deki fiyat değerlendirmesi kesinlikle doğru

güve değil, gübre...

 
Mikhail Dovbakh :

2017'deki fiyat değerlendirmesi kesinlikle doğru

Söyle bana.
 

bu böyle olmalı

double Averab=( Ask + Bid )/ 2 / _Point ;
double AUTOPRICE= MathFloor ( NormalizeDouble (Averab, 2 ) )* _Point ;
 
Taras Slobodyanik :

bu böyle olmalı

double Averab= MathAbs ( Ask - Bid )/ 2 / _Point ;
double AUTOPRICE= MathFloor ( NormalizeDouble (Averab, 2 ) )* _Point ;


Kodunuzu birkaç kez değiştirdiniz.

Ben de aynısını yaptım. deneyerek, double ve int'nin ne olduğunu anlayarak, ancak açık hesaplamalarla ihtiyacım olanı alamadım.

ilk satır önerdiğin şey

MathFloor ( NormalizeDouble (( Ask + Bid )/ Point , _Digits ) )* Point
2017.02 . 26 18 : 24 : 59.133 2017.01 . 02 00 : 03 : 00   Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: MathFloor = 2.10287
2017.02 . 26 18 : 24 : 59.133 2017.01 . 02 00 : 03 : 00   Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: DOUBLE    askP2= 105146 bidP2= 105141 Averab2= 105143.5000000000 AUTOPRICE= 1.0514300000
2017.02 . 26 18 : 24 : 59.133 2017.01 . 02 00 : 03 : 00   Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: FLOAT    askP= 105146 bidP= 105141 Averab= 105143.5000000000 AUTOPRICE= 1.0514299870
 

yani her şey doğru 105143.5000000000 aşağı yuvarlanmış 43 çıkıyor...

(46-41)/2=2,5 aşağı yuvarlama = 2

 
Taras Slobodyanik :

yani her şey doğru 105143.5000000000 aşağı yuvarlanmış 43 çıkıyor...

(46-41)/2=2,5 aşağı yuvarlama = 2


ve evet,

ancak farklı spreadlerde (2,3,4,5,6,7) aşağı yuvarlama farklıdır ve bazen tam olarak doğru değildir. sorun şu.

 
0'dan 8'e kadar kontrol edildi, her şey yolunda...
Neden: