Hatalar, hatalar, sorular - sayfa 2208

 

Ünlü röportaj sorusu.

i'de ne olacak?

 int i = 5 ;
i = i++ + ++i;
MQL5, 12'yi döndürür. MS Visual Studio , 13'ü döndürür.
 
Aleksey Rodionov :

c++ 'da olduğu gibi çalışıyor gibi görünüyor. Ben de sordum, örneğin C++ okumaya karar verdim. Birim başına aynı değer sadece bir farktır. Görünüşe göre ikinci durumda "y" 5 atar ve sonra ekler ve ilk örnekte önce ekler ve sonra atar (uzun bir süre nasıl çalıştığını anladım =D)

mql5'te bunlar eşdeğer işlemlerdir, c++'da farklıdırlar, aşağıda c++ için bir test örneği verdiniz))

 
. ... Rick D. ... . :

Ünlü röportaj sorusu.

i'de ne olacak?

MQL5, 12'yi döndürür. MS Visual Studio, 13'ü döndürür.

Yan etki nedeniyle belirlenmemiştir. Bu durumda - genellikle üçlü. Farklı optimizasyonlar değişken değerleri farklı şekilde hesaplayabilir. Optimizasyon adına.

 
Konstantin :

mql5'te bunlar eşdeğer işlemlerdir, c++'da farklıdırlar, aşağıda c++ için bir test örneği verdiniz))

Yakacak odunlar nereden? array[++i]=i ve array[i++]=i sonuçlarını karşılaştırdınız mı?

Zor bir soru. Sonek işlemi ile önek işlemi arasındaki fark nedir?

 
. ... Rick D. ... . :

Ünlü röportaj sorusu.

Yalnızca görüşülen kişinin UB'nin ne olduğunu bilip bilmediğini ortaya çıkaran aptal, gereksiz soru. ve tartışma konusu ile çok az ilgisi vardır.

Alexey Rodionov :
Oturup düşünüyorum, ön ek form kodu nasıl kullanışlı olabilir?

genellikle önek formu daha hızlıdır. şimdi zahmet etmene gerek yok, derleyici gerektiğinde postfix formunu optimize etmek için yeterli beyne sahip

 
Slava :

Yakacak odunlar nereden? array[++i]=i ve array[i++]=i sonuçlarını karşılaştırdınız mı?

Zor bir soru. Sonek işlemi ile önek işlemi arasındaki fark nedir?

ve array[++i]=i ve array[i++]=i bununla ne ilgisi var, konuşmada olmayanı nasıl karşılaştırabilirim...

Ortaya çıkan anlaşmazlığın bir parçası olarak mql'de değişiklikler varsa ve bunu biliyorsanız, o zaman moderatör olarak bunu diyalogdaki katılımcılara getirmeniz ve sözdizimi bilgisini test etmeye çalışmamanız gerekir, bu kesinlikle değil senin sorumluluğun...

ve yine de, buradaki herkese mql yardımındaki sonek ve önek işlemlerindeki farkla ilgili talimatları gösterin, ancak geçmiş yılların testleri bana mql'de bu işlemlerin daha önce eşdeğer olduğunu söylüyor

not. bu arada, iletişim kutusundaki örneği kontrol ettim

 int i = 5 ;
i = i++ + ++i;

1816 sonucu oluştur == 12

 
TheXpert :

Yalnızca görüşülen kişinin UB'nin ne olduğunu bilip bilmediğini ortaya çıkaran aptal, gereksiz soru. ve tartışma konusu ile çok az ilgisi vardır.

genellikle önek formu daha hızlıdır. Şimdi zahmet etmenize gerek yok, ancak derleyici gerektiğinde postfix formunu optimize etmek için yeterli beyne sahip

Ayrıca, bu tür yapıların kullanımı, bence, kodda kabul edilemez.

Birincisi, farklı uygulamalar üzerinde çalışmanın belirsizliği ve hatta daha fazlası - çünkü bu tür kodlarda hata yapmak kolaydır ve bunu anlamak kolay değildir.

Kod bir bakışta şeffaf ve anlaşılır olmalıdır.

 
Georgiy Merts :

Ayrıca, bu tür yapıların kullanımı, bence, kodda kabul edilemez.

Birincisi, farklı uygulamalar üzerinde çalışmanın belirsizliği ve hatta daha fazlası - çünkü bu tür kodlarda hata yapmak kolaydır ve bunu anlamak kolay değildir.

Kod bir bakışta şeffaf ve anlaşılır olmalıdır.

mql5 yardımını anlaşmalar ve dil kuralları biçiminde değiştirmenin tam zamanı

 
RETAIL_HEDGING hesap türü olan bir pozisyonun kısmi kapanması hakkında bana bir soru söyleyin. Örneğin ben eksperden pozisyonun yarısını kapatıyorum, daha küçük lotlu yeni bir emir otomatik olarak açılmalıdır. Peki, yeni bir siparişin hangi noktada terminalde olması garanti edilir? PositionClosePartial'den hemen sonra görünmesi gerekmediğini ve OnTrade'de bir yerde yakalanması gerektiğini doğru anlıyor muyum?
 
Konstantin :

ve array[++i]=i ve array[i++]=i bununla ne ilgisi var, konuşmada olmayanı nasıl karşılaştırabilirim...

Ortaya çıkan anlaşmazlığın bir parçası olarak mql'de değişiklikler varsa ve bunu biliyorsanız, moderatör olarak bunu diyalogdaki katılımcılara getirmek ve sözdizimi bilgisini test etmeye çalışmamakla yükümlüsünüz, bu kesinlikle değil senin sorumluluğun...

ve yine de, buradaki herkese mql yardımındaki sonek ve önek işlemlerindeki farkla ilgili talimatları gösterin, ancak geçmiş yılların testleri bana mql'de bu işlemlerin daha önce eşdeğer olduğunu söylüyor

not. bu arada, iletişim kutusundaki örneği kontrol ettim

1816 sonucu oluştur == 12

Ve bu örneklerinizin tamamen teorik olmasına rağmen. Tamamen öğrenciler için. Aklı başında hiçbir programcı bunu üretime sokmaz.

Sonek ve önek artırma ve eksiltme aslında esas olarak döngülerde kullanılır. Bunlara artım ve eksiltme denir!

İşte örnekler

 int i= 0 ;
while (i< ArraySize (array))
   array[i++]=i;

ve

 int i= 0 ;
while (i< ArraySize (array))
   array[++i]=i;

Ön ek ve son ek işlemlerinin aynı şekilde çalıştığını iddia ediyorsanız, bayrak elinizde, davul boynunuzdadır.

Bir önek artışı durumunda, son yinelemede başlatılmamış bir sıfır dizi öğesi ve bir dizi aralık dışı hatası alırsınız.


not. Bu konudaki belgelerimizi yeşil bağlantıda yeniden okumaya karar verdim https://www.mql5.com/en/docs/basis/operations/mathoperation

Önemli Not

int i=5;
int k = i++ + ++i;

Yukarıdaki ifadeyi bir programlama ortamından diğerine aktarırken (örneğin, Borland C++'dan MQL5'e) hesaplama sorunları ortaya çıkabilir. Genel olarak, değerlendirme sırası derleyicinin uygulanmasına bağlıdır. Pratikte, azaltma sonrası (arttırma sonrası) uygulamanın iki yolu vardır:

  1. tüm ifade değerlendirildikten sonra değişkene artma sonrası (artış sonrası) uygulanır;
  2. artma sonrası (artma sonrası) değişkene işlem yerinde hemen uygulanır.

MQL5 şu anda azaltma sonrası (artış sonrası) hesaplamak için ilk yöntemi uygular. Ancak bu bilgiyle bile, bu inceliğin kullanımını denememek daha iyidir.

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...