Imprecisão do tipo REAL em PHP

Categoria: PHP
Publicado em 08 de Junho de 2011

O PHP (assim como a maioria das linguagens) apresenta imprecisão no armazenamento de um número real. Portanto, a comparação com o operador de igualdade não é recomendada.

Para demonstrar a imprecisão, o seguinte exemplo pode ser testado:

1
echo (int) ((0.1 + 0.7) * 10);

Isto deveria imprimir o valor 8, mas o que se obtém é o valor 7.

Isso ocorre devido à estrutura de armazenamento de dados de um valor do tipo real. Na codificação do número para o formato em bits e depois na decodificação, a operação acima perde precisão e equivalerá ao número 7.999999 (em vez de 8).

Na prática, todas as vezes em que uma operação é feita utilizado variáveis do tipo real, existe uma pequena perda de precisão no valor armazenado. Após milhares de operações sucessivas, uma variável pode apresentar perda de precisão considerável.

Para mais informações, consultar o formato IEEE 754 (http://en.wikipedia.org/wiki/IEEE_754-2008).


 

Copyright © Fernando Hidemi Uchiyama 2010 - Todos os direitos reservados