Fórum Comparação de Doubles #284897
16/06/2005
0
D1 provém da soma de um grupo de Doubles c/ 1 decimal.
D2 provém da soma de outro grupo de Doubles c/ 1 decimal.
Pelo Debug do Delphi, quando clico Ctrl+F7 em D1, ele me mostra:307.3
quando clico Ctrl+F7 em D2, ele me mostra:307.3
Quando faço: if D1 = D2; ele me retorna false.
Quando faço: if Trunc(D1*10) = Trunc(D2*10); ele me retorna false.
Quando faço: if Round(D1*10) = Round(D2*10); ele me retorna true.
Alguém por acaso saberia um jeito de comparar 2 Doubles ?
Antecipados agradecimentos . . .
Ipc$
Curtir tópico
+ 0Posts
16/06/2005
Ipc$
Trunc(Valor) / 10;
Gostei + 0
17/06/2005
Ipc$
Gostei + 0
17/06/2005
Bruno Belchior
if RoundTo(10.5555555,2) = RoundTo(10.555555556,2) then
Gostei + 0
17/06/2005
Beppe
SameValue(A, B) usa o erro padrão, mas pode usar outro(SameValue(A, B, MaxDiff)).
Gostei + 0
17/06/2005
Ipc$
Trunc(Valor) / 10.
Para mim isso significa que todos estão com 1 decimal, portanto seu somatório resultará sempre em 1 decimal.
Pq então é gerado um flutuante com mais decimais ?
Gostei + 0
17/06/2005
Beppe
Se te interessar mais sobre FP´s e souber inglês, google-it: ´What every computer scientist should know about floating point arithmetic´...o título é algo assim.
Gostei + 0
18/06/2005
Ipc$
Bom, não vou mais me aprofundar nisso e a solução satisfatória que encontrei p/ esse tipo de comparação foi:
if (D1 = D2) or (Trunc(D1*10) = Trunc(D2*10)) or (Round(D1*10) = Round(D2*10)) then Result := true else Result := false;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)