Erros, bugs, perguntas - página 3108

 
Nikolai Semko #:

Entendido.
Este corredor de eclipse...

Tenho tempo a decorrer na minha demonstração desde que não tenho ligação e já passaram 40 horas.

 
Nikolai Semko #:

Não se pode saltar novas versões de produtos, embora antes estivesse bem.


Parece que não sou eu que tenho o problema.
construir 3110

Ontem tivemos problemas na ligação ao servidor MetaQuotes-Demo, que é utilizado para validar produtos Marketplace, entre outras coisas.

Corrigimos este bug ontem e verificámos novamente todos os produtos que falharam a validação por razões técnicas.

Pedimos desculpa pelo inconveniente.

Se falhámos acidentalmente o seu produto e não o verificámos de novo, faça-o você mesmo. A validação deve agora funcionar como normal.

 

Aqui está um código de amostra:

//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
void OnStart()
  {
  uint iCurrent =722;
  int  iinterval=1000;         
  int  iNext=(int)(iCurrent-iinterval/2); // 722-500=222
  Print ("Current :",iCurrent);
  Print ("iNext   :",iNext);
  long  temp=(long)(iNext-iCurrent); //предупреждений нет ожидаем Лонг -500
  Print ( " temp (long):",temp);//int - uint ->uint Result: uint -- oшибка!

  Print ( " delta(&int)"+string((int)(iNext-iCurrent)));    // неожиданный успех  
  Print ( " delta(&long)"+string((long)(iNext-iCurrent)));  // опять штанга
  //-----------------------------------
 }

Resultado:

2021.11.23 13:07:35.931 testUint (Volatility 75 Index,M15)      Current :722
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)      iNext   :222
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)       temp (long):4294966796
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)       delta(&int)-500
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)       delta(&long)4294966796

Alguém pode explicar - porquê

long  temp=(long)(iNext-iCurrent);

4294966796

e não -500.

Não sei o que se passa na minha cabeça... (

 
Mikhail Dovbakh #:

Aqui está um código de amostra:

Resultado:

Alguém pode explicar - porquê

e não -500.

Não sei o que se passa na minha cabeça... (

long temp=(long)iNext-iCurrent;

https://www.mql5.com/ru/docs/basis/types/casting

O iNext foi primeiro reduzido a um número inteiro não assinado. Depois o resultado inteiro não assinado é convertido em longo.

No meu exemplo, iNext é imediatamente lançado para o tipo longo, portanto iCurrent é também lançado para o tipo longo, mas implicitamente. O resultado é imediatamente convertido em longo

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Приведение типов - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Slava #:

A questão era porque é que este tipo de encomenda não dá o resultado certo. Só posso assumir que depende da ordem hierárquica do tipo na expressão. Se os tipos estiverem em ordem hierárquica na expressão em tempo de execução, a resposta é correcta, e se não estiver, então uma conversão de tipo não explícita violando a hierarquia pode alterar o valor da variável.

long temp=(long)((int)iNext-(uint)iCurrent); 

Em geral, uma conversão de tipo não explícito viola a hierarquia.

 
MetaQuotes #:

Ontem tivemos problemas na ligação ao servidor MetaQuotes-Demo, que é utilizado, entre outras coisas, para a validação de produtos Marketplace.

Corrigimos este problema ontem e verificámos novamente todos os produtos que não puderam passar a validação devido a razões técnicas.

Pedimos desculpa por qualquer inconveniente.

Se falhámos acidentalmente o seu produto e este não for revalidado, por favor faça-o você mesmo. A verificação deve agora funcionar como normal.

Obrigado!
Tudo está a funcionar agora.
 
Slava #:

https://www.mql5.com/ru/docs/basis/types/casting

O iNext foi primeiro reduzido a um número inteiro não assinado. Depois o resultado inteiro não assinado é convertido em longo.

No meu exemplo, iNext é imediatamente lançado ao tipo longo, pelo que iCurrent é também lançado ao tipo longo, apenas implicitamente. O resultado é imediatamente afixado a longo prazo

pode ver porquê

 Print ( " delta(&int)"+string((int)(iNext-iCurrent)));    // неожиданный успех 

и

int itemp=(int)(iNext-iCurrent); 


dá o resultado certo?

Seguindo a sua descrição , o iNext é lançado pela primeira vez a um número inteiro não assinado. Depois o resultado inteiro sem assinatura é convertido em inteiro com assinatura.

Certo?

 

Linha de tendência não magnetizada a vela vermelha baixa(EURUSD, M5;Escala de tempo precisa; Magnetização: 15)


 
Mikhail Dovbakh #:

depois explicar porquê.

и

int itemp=(int)(iNext-iCurrent); 


dá o resultado certo?


Facilmente

um número inteiro não assinado com um comprimento de 32 bits 4294966796 quando convertido num número inteiro assinado da mesma dimensão dá -500

 
Valeriy Yastremskiy #:

A questão era porque é que este tipo de encomenda não dá o resultado certo. Só posso assumir que depende da ordem hierárquica do tipo na expressão. Se os tipos estiverem em ordem hierárquica na expressão em tempo de execução, a resposta é correcta, e se não estiver, então uma conversão de tipo não explícita violando a hierarquia pode alterar o valor da variável.

Zy Em geral uma conversão de tipo não explícito e uma violação da hierarquia.

Já lhe dei o link https://www.mql5.com/ru/docs/basis/types/casting

Diz tudo isto com grande detalhe. Leia-o do princípio ao fim sem perder nada

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Приведение типов - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5