Atualização 19 de maio de 2021
Funções adicionadas para depuração
// Conversão do valor numérico em uma cadeia de texto decimal exata. string DoubleToStringExact(double value); // Conversão do valor numérico em uma cadeia de texto hexadecimal bruta. string DoubleToHexadecimal(double value);
Atualização 21 de maio de 2021
Adicionadas funções diversas
// Converter x no intervalo [min, max] para y em outro intervalo [new_min, new_max]. // Isso pode ser usado para redimensionar valores de indicadores ou objetos gráficos. double map_range(double x, double min, double max, double new_min, double new_max); // Obter o número de dígitos após o ponto decimal. int GetDigits(double number);
Atualização 27 de maio de 2021
Adicionadas funções para depuração
// Retorna a diferença int entre dois floats expressa em epsilon (ulps). long UlpDiff(const double num1, const double num2); // Retorna o próximo valor representável após x double nextafter(double num);
Adicionadas funções diversas
bool IsRound(const double number, const int digits); bool IsRoundToStep(const double number, const double step);
Adicionados o script'dotnet_cross_check.mq5' e 'RoundSharp.dll' escritos em C#.
Atualização 30 de maio de 2021
Funções diversas adicionadas
/Obter o número de dígitos inteiros à esquerda do ponto decimal. int IntegerDigits(double number); //mapear x em uma escala [min, max] para a escala normalizada [0, 1]. double normalize(double x, double min, double max);
Funções úteis para a representação binária de duplas
//Retorna o valor duplo correspondente a uma representação de bits. double LongBitsToDouble(long bits); //Retorna a representação de bits correspondente a um valor duplo. long DoubleToLongBits(double value); //Retorna o expoente imparcial usado na representação de bits. int GetExponent(double value); //Retorna a mantissa usada na representação de bits. long GetMantissa(double value); //Retorna o tamanho de um ulp do argumento. double Ulp(double value);
Funções úteis para a representação de strings de duplas
// Conversão do valor numérico na representação de string mais curta // que se transforma no mesmo valor numérico. string Repr(double value);
Atualização 1 de junho de 2021
Adicionadas novas funções:
// Retorna a codificação bruta do expoente na representação de bits. int RawExponent(double value); // Retorna a codificação bruta do significante na representação de bits. long RawSignificand(double value); // Retorna o expoente não tendencioso (ajustado) de um valor duplo. int Exponent(double value); // Retorna o significante de um valor duplo. double Significand(double value); // Determinar se o número é exatamente representável em double. bool IsExactDouble(double value); // Formata o número com separador de milhares. string FormatNumber(const double number,const string separator=",");
Atualização 17 de junho de 2021
Adicionadas novas funções:
// Determina se o valor passado é um número inteiro. bool IsInteger(double num); // Obter a parte decimal (sempre positiva) double GetFraction(double num); // Recortar (limitar) um número aos limites (intervalo) template<typename T> T Clip(T value, T low, T high); // No mql, o erro de divisão zero força o programa mql a parar. double safeDiv(double x, double y); // Conversão do valor numérico em uma string de constante de flutuação hexadecimal. string DoubleToHexFloatConstant(double value);
Atualização 20 de junho de 2021
Adicionada nova função:
// Avança um número de ponto flutuante em um número especificado de ULPs. double DoubleAdvance(double value, long distance);
Atualização 21 de junho de 2021
Adicionada nova macro semelhante a uma função:
// Imprimir duplas usando o especificador de formato round-trip ("%.17g"). #define PRINT_R(A) Print(#A + " = ", Repr(A))
Você já testou esses recursos no mt4? (o arquivo de inclusão, quero dizer)
Atualização de 27 de janeiro de 2023
Renomeação das funções de arredondamento para torná-las mais consistentes:
double MathRound(const double value, const int digits); double MathRound(const double value, const double step); double MathFloor(const double value, const int digits); double MathFloor(const double value, const double step); double MathCeil(const double value, const int digits); double MathCeil(const double value, const double step); double MathTrunc(const double value, const int digits); double MathTrunc(const double value, const double step);
Adicionadas duas novas funções para comparação de duplas:
//+------------------------------------------------------------------+ //| Verificar quase a igualdade (ignorar o pequeno erro de desvio) //| Se as representações binárias de duas duplas diferirem em mais de //| um bit menos significativo (ulp), a função retorna falso. //+------------------------------------------------------------------+ bool AlmostEqual(const double a, const double b); //+------------------------------------------------------------------+ //| Verificar se dois números de ponto flutuante estão próximos em valor. //| Onde, n: é o número de dígitos significativos que perdemos //| por meio de erros de arredondamento (diferença de precisão máxima permitida). //| Algo como n = 2 ou 3 geralmente funciona na prática. //+------------------------------------------------------------------+ bool IsClose(const double a, const double b, const int maxDifferentSignificantDigits = 2);
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
Math Utils:
Funções úteis para comparação e arredondamento de números de ponto flutuante (preços, lotes e dinheiro).
Autor: amrali