Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 154
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
Ou seja, precisa de converter 1.33182 para 1.3318? Cortaria simplesmente o 5º dígito após o ponto decimal ou arredondá-lo-ia para o 4º dígito, por exemplo, teria 1,3318 ou 1,3319 a partir de 1,33186?
A minha pergunta é se existe ou não um insecto. Ao converter de duplo para int no meu exemplo, o resultado é um a menos. Por favor, verifique você mesmo.
Alerta deve dar 13318, mas dá 13317. Se não for arredondado para int, dará 13318,0 correctamente.Diga-me se existe uma diferença nas expressões:
и
Diga-me se existe uma diferença nas expressões:
и
Se tem uma suspeita de que algo não está bem, que o faça:
A minha pergunta é se existe ou não um insecto. Ao converter de duplo para int no meu exemplo, o resultado é um a menos. Por favor, verifique por si próprio.
Alerta deve dar 13318, mas dá 13317. Assim, se não reduzir a int, então dá correctamente 13318.0causa o descarte da parte fracionada em vez de arredondamento (ou seja, semelhante a MathFloor() em vez de MathRound()), e no seu caso, o número normalizado pode muito bem ser igual a 13318 exactamente, mas digamos 13317,999999999999999999997
que, quando a saída em forma fracionada com número limitado de dígitos faz com que o arredondamento corrija o resultado (esperado), e quando parte fracionada de.... é descartada vê com os seus próprios olhos.
Espero ter explicado claramente.
existe um análogo do parcial do Sharp? ou como fazê-lo?
não há analógico. pode inserir uma peça de definição usando #include <partial_class_code.mqh>.
Algumas pessoas até imitam múltiplas heranças desta forma. // Eu não faço isto, habituei-me a fazer sem ele. :)
Se suspeitar que algo está errado, faça-o:
Já o fiz. Só por curiosidade.
Estou a ver. Voltando à sua pergunta anterior, a essência do registo pode ser extraída para esta comparação:
Não há diferença entre estas entradas. Ao mesmo tempo, recomendo-lhe que faça um escalonamento dos cálculos matemáticos no interior do if-os:
if (A<=(B1+B2*B3) && C<=(D1-D2*D3))
O alerta não produz um erro. A questão é que a normalização leva um número a uma forma binária, que está mais próxima do análogo decimal solicitado, embora possa não coincidir com ele numa direcção maior ou menor (no seu caso). Como o que é expresso por uma fracção decimal finita, pode nem sempre ser expresso por uma fracção binária finita . Expressão
resulta em descartar a parte fracionada em vez de arredondar (ou seja, parece-se mais com MathFloor() do que MathRound()), e no seu caso o número normalizado pode muito bem ser 13317.9999999999999999997 em vez de 13318 exactamente.
que, quando a saída em forma fracionada com número limitado de dígitos faz com que o arredondamento corrija o resultado (esperado), e quando parte fracionada de.... é descartada vê com os seus próprios olhos.
Espero tê-lo explicado claramente.
Obrigado, estou a ver.
Outra questão, como é que luto contra isto se não posso fazer sem me converter em int?
Obrigado, estou a ver.
Outra questão, como lidar com isto se não pode passar sem transferência para a int?
e acrescenta um par de epsilons.
DBL_EPSILON
O número mais pequeno para o qual a condição 1.0+DBL_EPSILON != 1.0 é satisfeita