![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Isto porque é 0,6, portanto 0,5 só é obtido através de batota.
Se 'v1' for inserido em qualquer número, então ele mostra que é arredondado corretamente para 'i = 2'.
Se 'v1' for inserido em qualquer número, então você pode ver que até 'i = 2' tudo é arredondado corretamente.
Quando apenas um dígito é normalizado, é simples: 0, 1, 2, 3, 4 -> 0, e 5, 6, 7, 8, 9 -> 1.
Quando dois dígitos são normalizados, são levados em conta números de dois dígitos: 0 - 49 -> 0, e 50 - 99 -> 1. Afinal, se o número 1,49 tem que ser arredondado para números inteiros, será que realmente temos que obter 2, que é 51 centésimos contra os 49 centésimos disponíveis de distância para 1?
É a mesma coisa com três dígitos, quatro dígitos, etc.
Mas a 1,45 é arredondada para 2, mas somente se tiver sido normalizada previamente com um grau de precisão superior.
v1 = 0 = 1.0000000, v2 = 0 = 2.0000000
v1 = 1 = 1.5000000, v2 = 1 = 1.5000000
v1 = 2 = 1,4500000, v2 = 2 = 1,4600000
v1 = 3 = 1.4550000, v2 = 3 = 1.4550000
Acontece que se nos cálculos do número foi normalizado para uma maior precisão e nos cálculos subseqüentes para normalizar o número para uma precisão menor, resultará em uma precisão diferente da simples normalização deste número para uma precisão menor.
Acontece que se no cálculo o número foi normalizado com maior precisão e nos cálculos subsequentes o número é normalizado com menor precisão, o resultado é diferente de apenas normalizar o número para uma precisão menor.
Desculpe-me, mas como você obtém os valores que deseja?
Se eu usar as funções recomendadas, então:
- Em um caso eu recebo o valor corretamente arredondado
0,06-0,02 =NormalizeDouble(0,0399999999999999999,2) = 0,04
A divisão é aproximada e a normalização é necessária.
- No segundo caso, eu também recebo arredondamento, mas não é necessário neste caso
0,06-0,024 = NormalizeDouble(0,036,2) = 0,04
A normalização (arredondamento) não é necessária aqui.
Mas como posso normalizar em vez de arredondar?
Desculpe-me, mas como você obtém os valores que deseja?
Para isso, vale apenas a pena formular quais são os "valores certos". ))
Se eu usar as funções recomendadas, então:
- Em um caso eu recebo um valor devidamente arredondado
0,06-0,02 = NormalizeDuplo(0,039999999999999999999,2) = 0,04
A divisão é aproximada e não se pode passar sem normalização.
- No segundo caso, também tenho direito a arredondamento, mas não é necessário neste caso
0,06-0,024 = NormalizeDuplo(0,036,2) = 0,04
A normalização (arredondamento) não é necessária aqui.
Mas como posso normalizar corretamente, em vez de arredondar os valores?
O exemplo acima mostra que você está usando algum algoritmo intuitivo que determina a "retidão" da normalização. No primeiro caso, é uma fração infinita, enquanto no segundo caso é finita. Ajuste seu algoritmo para converter o número real para a forma desejada.
Embora seja a maneira mais fácil - decidir antecipadamente sobre a precisão necessária dos cálculos.
Para fazer isso, vale simplesmente a pena formular quais são os "valores certos". ))
Pelo exemplo acima, você pode ver que está usando algum algoritmo intuitivo, pelo qual você determina a "necessidade" de normalização. No primeiro caso, é uma fração infinita, enquanto no segundo caso é finita. Ajuste seu algoritmo para converter o número real para a forma desejada.
Embora a maneira mais fácil seja decidir antecipadamente qual precisão você precisa.
Se você quiser 0,036 (3 casas decimais), normalize para 3, e não 2.
Eu estava errado, até 3 dígitos deveriam ser normalizados. É possível fazer isso?
Eu estava errado, até 3 dígitos deveriam ser normalizados. Será que vai funcionar dessa maneira?
Aqui está o seu código:
Em vez de 2, coloque 3 e é 0,036.