Desde que os dois valores sejam iguais, qualquer um deles é um mínimo válido. Considere MathMin(1, 1), não há diferença se a função retorna o primeiro (1) ou o segundo (1).
Portanto, retornar 0,0 não é diferente de -0,0.
Edit: a propósito, as duas expressões destacadas NÃO são idênticas.
Acho que concordo com meu colega amrali. Eu também acrescentaria que há uma função nativa MathMin(). Ela também considera que os zeros com sinais diferentes são iguais. Pelo que entendi, seu algoritmo é bastante simples. Eu o dupliquei em minha função CustomMathMin().
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
double positive_zero_val, negative_zero_val;
positive_zero_val = 0.0;
negative_zero_val = -0.0;
// 1) -0.0 / 0.0double native_min_val, custom_min_val;
native_min_val = ::MathMin(negative_zero_val, positive_zero_val);
custom_min_val = CustomMathMin(negative_zero_val, positive_zero_val);
::Print("\nArguments: -0.0, 0.0");
::PrintFormat("Native min value = %0.2f", native_min_val);
::PrintFormat("Custom min value = %0.2f", custom_min_val);
// 2) 0.0 / -0.0
native_min_val = ::MathMin(positive_zero_val, negative_zero_val);
custom_min_val = CustomMathMin(positive_zero_val, negative_zero_val);
::Print("\nArguments: 0.0, -0.0");
::PrintFormat("Native min value = %0.2f", native_min_val);
::PrintFormat("Custom min value = %0.2f", custom_min_val);
}
//+------------------------------------------------------------------+//| Custom MathMin |//+------------------------------------------------------------------+double CustomMathMin(double value1, double value2)
{
if(value1 < value2)
return value1;
return value2;
}
//+------------------------------------------------------------------+
Temos isso no registro:
2024.01.2923:49:46.351 c11 (EURUSD,H1) Arguments: -0.0, 0.02024.01.2923:49:46.351 c11 (EURUSD,H1) Native min value = 0.002024.01.2923:49:46.351 c11 (EURUSD,H1) Custom min value = 0.002024.01.2923:49:46.351 c11 (EURUSD,H1)
2024.01.2923:49:46.351 c11 (EURUSD,H1) Arguments: 0.0, -0.02024.01.2923:49:46.351 c11 (EURUSD,H1) Native min value = -0.002024.01.2923:49:46.351 c11 (EURUSD,H1) Custom min value = -0.00
É fácil ver que, a partir de dois números iguais, o algoritmo considerará o segundo número como o valor mínimo de...
Como conheço muito bem a pergunta, escrevi as duas variantes do MathMin para mostrar que funções matematicamente idênticas em linguagens de programação produzem resultados diferentes.
template <typename T>
T ToType( constdouble Num )
{
union UNION
{
T Num1;
double Num2;
} Union;
Union.Num2 = Num;
return(Union.Num1);
}
voidOnStart()
{
Print(ToType<long>(MathMin(-0.0, 0.0))); // 0Print(ToType<long>(MathMin(0.0, -0.0))); // -9223372036854775808
}
Como tenho um excelente entendimento da questão, escrevi as duas versões do MathMin para mostrar que funções matematicamente idênticas em linguagens de programação produzem resultados diferentes.
template <typename T>
T ToType( constdouble Num )
{
union UNION
{
T Num1;
double Num2;
} Union;
Union.Num2 = Num;
return(Union.Num1);
}
voidOnStart()
{
Print(ToType<long>(MathMin(-0.0, 0.0))); // 0Print(ToType<long>(MathMin(0.0, -0.0))); // -9223372036854775808
}
Então, o que é incomum? O fato de que nos números 0,0 e -0,0 nem todos os 64 bits são iguais é óbvio:
Então, o que é incomum? O fato de que nos números 0,0 e -0,0 nem todos os 64 bits são iguais é óbvio:
Ele espera que MathMin() seja determinístico. Portanto, que sempre forneça o mesmo resultado quando os dois argumentos forem os mesmos. E não um resultado diferente dependendo de qual argumento é o primeiro ou o segundo.
Ele espera que a função MathMin() seja determinística. Portanto, que sempre forneça o mesmo resultado quando os dois argumentos forem iguais. E não um resultado diferente dependendo de qual argumento é o primeiro ou o segundo....
E assim é. Quando dois números são iguais, o segundo é retornado. Mostrei acima com um exemplo...
Ele espera que a função MathMin() seja determinística. Portanto, que sempre forneça o mesmo resultado quando os dois argumentos forem os mesmos. E não um resultado diferente dependendo de qual argumento é o primeiro ou o segundo.
fxsaber está certo, isso é um problema.
Você entendeu bem o que eu quis dizer. Você pode se deparar com o problema difícil de encontrar de obter resultados diferentes em códigos grandes. Foi por isso que notifiquei a comunidade neste tópico.
Você se recusa a entender.
Talvez eu entendesse se conhecesse o contexto da situação. Mas, do jeito que está, parece certo.
Desde que os dois valores sejam iguais, qualquer um deles é um mínimo válido. Considere MathMin(1, 1), não há diferença se a função retorna o primeiro (1) ou o segundo (1).
Portanto, retornar 0,0 não é diferente de -0,0.
Edit: a propósito, as duas expressões destacadas NÃO são idênticas.Acho que concordo com meu colega amrali. Eu também acrescentaria que há uma função nativa MathMin(). Ela também considera que os zeros com sinais diferentes são iguais. Pelo que entendi, seu algoritmo é bastante simples. Eu o dupliquei em minha função CustomMathMin().
Temos isso no registro:
É fácil ver que, a partir de dois números iguais, o algoritmo considerará o segundo número como o valor mínimo de...
Você se recusa a entender.
Não é nada de especial. Apenas -0,0==0,0.
nada de especial. Apenas -0,0==0,0
Como conheço muito bem a pergunta, escrevi as duas variantes do MathMin para mostrar que funções matematicamente idênticas em linguagens de programação produzem resultados diferentes.
Como tenho um excelente entendimento da questão, escrevi as duas versões do MathMin para mostrar que funções matematicamente idênticas em linguagens de programação produzem resultados diferentes.
Então, o que é incomum?
O fato de que nos números 0,0 e -0,0 nem todos os 64 bits são iguais é óbvio:
mas ainda assim 0.0 == -0.0
Os sinais < e <= parecem ser diferentes.....
concordo
Então, o que é incomum?
O fato de que nos números 0,0 e -0,0 nem todos os 64 bits são iguais é óbvio:
Ele espera que MathMin() seja determinístico. Portanto, que sempre forneça o mesmo resultado quando os dois argumentos forem os mesmos. E não um resultado diferente dependendo de qual argumento é o primeiro ou o segundo.
fxsaber está certo, isso é um problema.
Ele espera que a função MathMin() seja determinística. Portanto, que sempre forneça o mesmo resultado quando os dois argumentos forem iguais. E não um resultado diferente dependendo de qual argumento é o primeiro ou o segundo....
E assim é. Quando dois números são iguais, o segundo é retornado. Mostrei acima com um exemplo...
e não há nada de errado nisso.
Ele espera que a função MathMin() seja determinística. Portanto, que sempre forneça o mesmo resultado quando os dois argumentos forem os mesmos. E não um resultado diferente dependendo de qual argumento é o primeiro ou o segundo.
fxsaber está certo, isso é um problema.
Você entendeu bem o que eu quis dizer. Você pode se deparar com o problema difícil de encontrar de obter resultados diferentes em códigos grandes. Foi por isso que notifiquei a comunidade neste tópico.