É
sabido
que
frações
simples
como
0.1
ou
0.7
não
podem
ser
convertidos
em
sua
representação
binária
interna
sem
uma
pequena
perda
de
precisão
.
Isto
pode
causar
erros
confusos
:
por
exemplo
,
floor(
(0.1+0.7)*10
)
irá
retornar
7
em
vez
do
esperado
8
,
como
resultado
da
representação
interna
realmente
ser
algo
como
7.9999999999..
.
.
Isto
está
relacionado
ao
fato
de
que
é
impossível
expressar
,
exatamente
,
algumas
frações
em
notação
decimal
com
um
número
finito
de
dígitos
.
Por
exemplo
,
1
/
3
na
forma
decimal
se
torna
0.3333333
.
.
.
.
Então
,
nunca
confie
em
resultados
com
números
de
ponto
flutuante
até
a
última
casa
e
nunca
compare
números
de
ponto
flutuante
em
igualdades
.
Se
você
realmente
precisar
de
alta
precisão
,
você
pode
utilizar
as
funções
matemáticas
de
precisão
arbitrária
ou
as
funções
relacionadas
ao
gmp
.
|