Duplo versus FLOAT - erro de MathFloor não claro - página 3

 

Observe que o número normalizado quando a saída para o diário de bordo usando Print() pode conter mais casas decimais do que você espera. Por exemplo,

então no comentário o mesmo

 
fxsaber:
#define TOSTRING(A) #A + " = " + (string)(A) + " "

void OnStart()
{
  double Price1 = 105143;
  double Price2 = Price1 - 1 e-11;

  Print(TOSTRING(Price1) + TOSTRING(MathFloor(Price1)) +
        TOSTRING(Price2) + TOSTRING(MathFloor(Price2)) +
        TOSTRING(Price1 > Price2));
}
Resultado
Price1 = 105143.0 MathFloor(Price1) = 105143.0 Price2 = 105143.0 MathFloor(Price2) = 105142.0 Price1>Price2 = true
Não leve à letra a desregulação do número duplo.

Obrigado. Afinal, devo ter encontrado a solução certa, mas estava preocupado com um erro por causa do alinhamento incorreto!

 

O restante de um número não-normalizado dividido por outro número não-normalizado, o resultado é, de qualquer forma, não-normalizado.

Esta função deve ser totalmente retirada da linguagem, de modo a não traumatizar a psique imatura.

 
Vladislav Andruschenko:

Afinal, talvez eu tenha encontrado a solução certa.

Infelizmente, seu código é uma demonstração de um completo mal-entendido do que você está fazendo. Tente chegar ao fundo da questão.
 
Dmitry Fedoseev:

O restante de um número não-normalizado dividido por outro número não-normalizado, o resultado é, de qualquer forma, não-normalizado.

Esta função deve ser totalmente retirada da linguagem, de modo a não traumatizar a psique imatura.

Bem, tudo está normalizado para mim. Isso é o que é tão engraçado.
 
Vladislav Andruschenko:
Por mim tudo bem. Essa é a parte complicada.
Você está fazendo conversões desnecessárias que fazem com que você perca sinais.

Normalize somente antes de utilizar diretamente os resultados de seus cálculos. Evite todas as conversões de números e conversões o máximo possível antes.
 
Andrey Dik:
Você está fazendo conversões desnecessárias que resultam em perda de caracteres.
Estes já são códigos desesperados..... Eu o fiz de maneiras diferentes. Mas, como dito acima. Provavelmente por causa de ter sido levado incorretamente, estava pecando no erro. Embora estas variáveis também estivessem com falhas no código.

Obrigado a todos por sua ajuda e sugestões. Mas tudo funciona claramente com o flutuador.
 
Vladislav Andruschenko:
com flutuador tudo funciona claramente.
Uma das piores recomendações é mudar do dobro para a flutuação.
 
Vladislav Andruschenko:
Por mim tudo bem. Isso é o mais engraçado.
Em que parte do mundo isso é normal?
 
Vladislav Andruschenko:
Já está desesperado códigos..... Eu o fiz de maneiras diferentes. Mas, como dito acima. Provavelmente por ter sido aceito incorretamente, eu estava pecando por um erro. Embora estas variáveis também estivessem com falhas no código.

Obrigado a todos por sua ajuda e sugestões. Mas tudo funciona claramente com o flutuador.
A flutuação é uma castração numérica que não lhe dá nenhuma vantagem. É melhor lidar com todas as perdas nas conversões e usar a maior precisão possível - o dobro.