Características da linguagem mql5, subtilezas e técnicas - página 144
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
No NaN é necessário verificar adicionalmente
Há aí um número normal. A verificação é simples - dividir por aquilo por que se divide, depois verificar se é zero.
Há aí um número normal. A verificação é simples - aquilo por que se divide, verifica-se se é zero.
mas não se verifica zero neste código:
a expressãoNum ? em MQL será verdadeira se não houver valor 0x0000000000000000 em 8 bytes de duplo
em qualquer outro caso, esta expressão(Num ?) será verdadeira
no início deste mês falei em não verificar o bool no MQL - a resposta é sem perda de dados, por isso não há necessidade - é o mesmo problema, poderia tentar dividir a expressão em NaN - os bytes duplos não estarão vazios?
Não o posso verificar agora, mas é provavelmente a forma de o fazer:
Mas não se verifica zero neste código:
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Características da linguagem mql5, complexidades e truques
fxsaber, 2019.10.28 11:42
Não o posso verificar agora, mas provavelmente tem de ser assim:
Não vai funcionar. O número é um número normal no exemplo do acidente. O bool não tem nada a ver com isto.
Não vai funcionar. No exemplo do acidente, o Num é um número normal. O bool não tem nada a ver com isto.
Pesquisa de NaN verificada
funciona realmente em MQL5, pode começar o loop a partir do zero, mas terá de esperar mais tempo.
é uma questão de dupla precisão - está ligada a um tipo de processador específico, por isso fiz os comentários acima de que o erro não é reproduzido
UPD:
é melhor concluir dessa forma:
A sua pergunta é geralmente uma questão de precisão do duplo - está geralmente ligada a um tipo específico de processador, razão pela qual os comentários acima sobre o erro não são reproduzíveis
É reprodutível em qualquer tipo. Para ser honesto, não compreendo porque há tantas conversas sobre este tema. Bem, eles multiplicaram dois números não zero e obtiveram zero. Sem magia.
Todos compreendem este código, não é verdade?
Há aqui uma situação absolutamente semelhante, quando d se transforma em zero.
Sem magia.
que é a magia, não impressa desta forma:
2019.10.28 16:25:28.643 tst1 (EURUSD,H4) ULongDouble.d != ULongDouble.d verdadeiro
2019.10.28 16:25:28.643 tst1 (EURUSD,H4) b_value = verdadeiro
2019.10.28 16:25:28.643 tst1 (EURUSD,H4) d_value = nan
2019.10.28 16:25:28.667 tst1 (EURUSD,H4) divisão zero em 'tst1.mq5' (28,31)
A situação é absolutamente a mesma aqui, quando d se torna zero.
No seu exemplo, quando 0,1 * Num ? é um bool - é uma simples presença de um bit em 8 bytes de duplo
e quando 0,1 * Num é um duplo, então se perder a precisão, pode ir para Nan e obter uma divisão zero
DBL_MIN não é um duplo positivo mínimo.
DBL_MIN é um duplo positivo não-mínimo.
Penso que o segundo número tem um formato duplo inválido, mas ainda é validado tanto na impressora como nas operações.
Não o recebi aqui.
DBL_MIN não é um duplo positivo mínimo.
Bem, compare DBL_MIN com NaN - o resultado será em bool, certo?
E se dividirmos 1.0 por um número não-número, obteremos uma excepção, como foi dito acima
em geral, o facto de os criadores terem escrito muitas vezes que comparar com mais/menos do que/igual ao dobro não é correcto - é verdade, por vezes é possível obter um não-número e o resultado da comparação não será previsível.