Standart özelliklerin/yaklaşımların alternatif uygulamaları - sayfa 7

 
pavlick_ :

Çünkü double'ı tamsayıya (böylece) dönüştürmek boktan bir koddur. arkadaşlarla tur, bir kayan noktadan tamsayı türü almak için tasarlanmamıştır.

Peki, fonksiyon türünü double ile değiştirmenizi kim engelliyor?
Ve lütfen konuşmanı kontrol et.
 
Nikolai Semko :
Peki, fonksiyon türünü double ile değiştirmenizi kim engelliyor?
Ve lütfen konuşmanı kontrol et.

Hakaret yok dedi. Bir tamsayıya dönüştürmek için her türlü rint, lrint, llrint vardır. Ne de olsa, uzun (çift) çok daha basit hale getirebildiğiniz zaman ortaya çıkmadılar. Float'ı tamsayıya dönüştürmek kavramsal bir hatadır.

 
pavlick_ :

Hakaret yok dedi. Bir tamsayıya dönüştürmek için her türlü rint, lrint, llrint vardır. Ne de olsa, uzun (çift) çok daha basit hale getirebildiğiniz zaman ortaya çıkmadılar. Float'ı tamsayıya dönüştürmek kavramsal bir hatadır.

Ah, konu dışısın...
 
Nikolai Semko :
Ah, konu dışısın...

Tamam, UB sizin elinizde.

 
fxsaber :
O zaman belirsiz yorumlama. Birişlev çağrısının ortalama süresinin değil, döngü süresinin görüntülenmesine karar verdim.

Galibiyet 3-8 kez.

Belki de işlevlerin yürütme zamanını hesaplama yöntemi mükemmel değildir, ancak oldukça nesneldir. Ama biri daha iyi, daha nesnel bir seçenek sunarsa, o zaman kötü olur.

Yine de double tipinde tam bir benzetme için değiştirildi.

 double Ceil ( double x) { return double ((x-( long )x> 0 )?( long )x+ 1 :( long )x);}
double Round( double x) { return double ((x> 0 )?( long )(x+ 0.5 ):( long )(x- 0.5 ));}
double Floor( double x) { return double ((x> 0 )?( long )x:(( long )x-x> 0 )?( long )x- 1 :( long )x);} 
2018.08 . 25 22 : 16 : 01.309 TestRound (EURUSD,M10)  Время цикла без округления = 1.315 наносекунд, сумма = 5249993749.98145962
2018.08 . 25 22 : 16 : 01.309 TestRound (EURUSD,M10)  Время выполнения функции sqrt = 0.628 наносекунд, сумма = 81969849.90928555  // даже квадратный корень вычисляется в несколько раз быстрее чем штатные функции округления
2018.08 . 25 22 : 16 : 01.313 TestRound (EURUSD,M10)  Время выполнения функции ceil =   2.037 наносекунд, Контрольная сумма = 5250492895.0
2018.08 . 25 22 : 16 : 01.315 TestRound (EURUSD,M10)  Время выполнения функции Ceil =   0.587 наносекунд, Контрольная сумма = 5250492895.0
2018.08 . 25 22 : 16 : 01.318 TestRound (EURUSD,M10)  Время выполнения функции floor = 2.247 наносекунд, Контрольная сумма = 5249492896.0
2018.08 . 25 22 : 16 : 01.320 TestRound (EURUSD,M10)  Время выполнения функции Floor = 0.385 наносекунд, Контрольная сумма = 5249492896.0
2018.08 . 25 22 : 16 : 01.323 TestRound (EURUSD,M10)  Время выполнения функции round = 1.610 наносекунд, Контрольная сумма = 5249992896.0
2018.08 . 25 22 : 16 : 01.324 TestRound (EURUSD,M10)  Время выполнения функции Round = 0.181 наносекунд, Контрольная сумма = 5249992896.0

Geliştiricilere bu algoritmayı normal işlevlerde kullanmalarını öneriyorum.

Dosyalar:
TestRound.mq5  7 kb
 
)). Bu, yalnızca değerler aralığı hakkında kesin bilgi sahibi olan kişisel el sanatlarında bir yer olabilir, ancak standart bir kütüphanede olamaz. Yerleşik işlevler aptallar tarafından yazılmaz, en akıllı olduğunu düşünmeyin. Burada da bir arkadaş tanımsız ve belirtilmemiş davranış hakkında yazıyor ve sonra yanlış çalışmasına şaşırıyor https://www.linux.org.ru/forum/development/14422428#comments . Ve gerçek bir algoritmada (ve çıplak döngüde değil) birkaç nanosaniyelik tüm bu tasarruflar görünür bile olmayacak.
 

Ayrıca yuvarlama işlevlerinin neden double döndürmesi gerektiğini anlamıyorum. Benim düşünceme göre, yuvarlama noktası budur, kayan bir değerden nasıl bir tamsayı alacağınıza karar vermeniz gerekir.

Dönüşümün "kavramsal hatası" nedir - Ben de tam olarak net değilim.

 
Georgiy Merts :

Ayrıca yuvarlama işlevlerinin neden double döndürmesi gerektiğini anlamıyorum. Benim düşünceme göre, yuvarlama noktası budur, kayan bir değerden nasıl bir tamsayı alacağınıza karar vermeniz gerekir.

Dönüşümün "kavramsal hatası" nedir - Ben de tam olarak net değilim.

Bir tamsayının dışında ne elde ettiğinizi düşünün.
 
fxsaber :

NormalizeÇift

Sonuç, MyNormalizeDouble lehine 1123275 ve 1666643'tür (Optimize=1). Optimizasyon olmadan - dört kat daha hızlı (bellek için).


Size her zaman sormak istedim - kod stilinizde çok şey programlamak mümkün mü?

Görev, en karmaşık mekanizmayı bağımsız olarak geliştirmek ve oluşturmak için ayarlanmışsa, kod yazma yönteminizi kullanmaya değer mi? Ayrıca, her adımda, her kaydın performansını kontrol edin.

Bu sürece kendi tarzınızda ve seviyenizde yaklaşırsanız, bir geliştiricinin kodu okuması/yazması/kontrol etmesi ne kadar sürer?

Bahse girerim aklımdakinin yarısını yazmadan yaşlanırdım.


not Offtopik için üzgünüm. Programlama stili herkes için kişisel bir konudur. Ancak belirli bir aşamada, kodun tam olarak emek verimliliği amacıyla mümkün olduğunca okunabilir olması gerektiğini anlamaya başlıyorsunuz.

Productivity - США - MetaTrader 5
Productivity - США - MetaTrader 5
  • www.metatrader5.com
Индекс производительности труда показывает изменение объема выпущенной продукции, приходящегося на одного работника. Этот показатель полезен для предсказания инфляции и прироста объема производства. Если стоимость труда увеличивается соответственно увеличению производительности, и, кроме того, маловероятно увеличение производственных издержек...
 
Реter Konow :

Size her zaman sormak istedim - kod stilinizde çok şey programlamak mümkün mü?

Benim tarzımdan bir örnek mi?