Nota preliminar: Se você não realiza projetos multi-plataforma, pode ignorar esta seção.
No mundo da informática, a aritmética de números decimais é mais uma tecnologia do que uma ciência exata. Por exemplo, você aprendeu na escola que um terço (1/3) pode ser escrito como uma sucessão infinita de 3 depois da vírgula. Um computador, por outro lado, não sabe isso e precisa calcular a expressão. Da mesma maneira você sabe conceitualmente que três vezes um terço é igual a um; um computador calcula a expressão para obter o resultado. Dependendo do tipo de computador que utilize, um terço é calculado como um número limitado de "três" depois da vírgula. Este número se chama a “precisão” da máquina.
Nos antigos Macintosh de processador de 68K, o número de precisão era igual a 19; isto significa que 1/3 é calculada com 19 dígitos significativos. Em uma máquina Windows ou Power PC, este número é 15; de maneira que 1/3 é mostrado com 15 dígitos significativos. Se você mostrar a expressão 1/3 na janela do Depurador de 4D, obterá 0.3333333333333333333 nos Macintosh de 68K e 0.3333333333333333148 em Windows ou Power PC. Note que os últimos três dígitos são diferentes porque a precisão em Windows e Power PC é menor do que a dos Macintosh de 68K. Entretanto, se você visualizar a expressão (1/3)*3, o resultado é 1 em ambas as máquinas.
Se seus cálculos correspondem ao número de metros quadrados de seu jardim, a você em realidade não lhe interessam os dígitos depois da vírgula. Por outro lado, se estiver preenchendo uma declaração de imposto de renda, pode em alguns momentos, ficar preocupado pela precisão de seu computador. Entretanto, lembre que os 19 ou 15 dígitos depois da vírgula são suficientes inclusive se estiver manejando milhões de dólares de rendas.
Por que o valor 1/3 parece diferente em Macintosh com processador 68K do que em Power PC?
Nos Macintosh de processador de 68K, o sistema operativo armazena os números reais em 10 bytes (80 bits), enquanto que em Windows e Power Macintosh, são armazenados em 8 bytes (64 bits). Esta é a razão pela qual há 19 dígitos significativos em Macintosh de 68K e até 15 dígitos significativos em Windows e Power Macintosh.
Então, por que a expressão (1/3)*3 retorna 1 em ambas as máquinas?
Um computador só pode fazer cálculos aproximados. Portanto, quando compara ou calcula números, um computador não trata os números reais como objetos matemáticos e sim como valores aproximados. Em nosso exemplo, 0.3333... multiplicado por 3 dá 0.9999...; a diferença entre 0.9999... e 1 é tão pequena que a máquina considera que o resultado é igual a 1, e portanto retorna 1. Para maior informação sobre este tema, consulte o comando SET REAL COMPARISON LEVEL.
Há um comportamento dual, então deve diferenciar entre:
- A maneira como são calculados e comparados os números reais
- A maneira como são visualizados na tela ou são impressos
Inicialmente, 4D manejava os números reais utilizando o tipo padrão de 10 bytes correspondente ao sistema operativo de Macintosh de 68K. Portanto, os valores reais guardados no arquivo de dados no disco são guardados utilizando este formato. Para manter a compatibilidade entre todas as versões (Windows, Power Macintosh e Macintosh) de 4D, os arquivos de dados sempre utilizam o mesmo formato de 10 bytes. Como os cálculos internos são realizados em Windows ou Power Macintosh utilizando o formato de 8 bytes, 4D converte os valores de 10 bytes a 8 bytes, e vice versa. Portanto, se carrega um registro que contenha valores reais, o qual foi guardado em Macintosh de 68K, em Windows ou Power Macintosh, é possível perder alguma precisão (de 19 a 15 dígitos significativos). Entretanto, se carregar um registro que contenha valores reais, o qual foi guardado em Windows ou Power Macintosh, em um Macintosh de 68K, não haverá perda de precisão. Basicamente, se utilizar um banco de dados em máquinas com processador de 68K, Power PC ou Windows, conta com uma precisão de 15 e não de 19 cifras significativas.
Com a ajuda do comando SET DATABASE PARAMETER, pode definir o número de dígitos a serem ignorados (4 é o padrão) quando visualize números reais.