Números Aleph e a Linguagem C

Tudo no mundo que nos rodeia é de natureza contínua, ao contrário do que se passa no interior de um computador.

O mundo dos computadores é digital, pelo que as grandezas que neles pretendemos representar sofrem um processo de digitalização, materializando-se fisicamente na forma binária, que é simbolicamente é representada recorrendo ao 1 (um) e ao  0 (zero).

O universo binário tem uma cardinalidade muito simples de compreender porque só tem dois elementos.

Ao bom estilo “The Matrix” vamos fechar o olhos e 0110100101101101011000010110011101101001011011100110000101110010001000000111000101110101011001010010000001110110011011110111010100100000011000110110111101101110
0111010001101001011011100111010101100001011100100010000001100001001000000110010101110011011000110111001001100101011101100110010101110010001000000110010101110011
0111010001100101001000000110000101110010011101000110100101100111011011110010000001110101011101000110100101101100011010010111101001100001011011100110010001101111
0010000001110101011011010110000100100000011100100110010101110000011100100110010101110011011001010110111001110100011000011110011111100011011011110010000001100010
01101001011011101110000101110010011010010110000100100001

No que diz respeito à representação do texto as limitações são poucas, ou praticamente inexistentes. Basta escolher uma tabela de caracteres compatível com o tipo de linguagem que estamos a utilizar.

O problema coloca-se quando pretendemos representar grandezas contínuas que, como facilmente se pode compreender, nunca irão ser rigorosamente representadas neste cenário binário.

Vamos imaginar um programa muito simples escrito em Linguagem C, que pretende apenas armazenar três números reais em memória, exibindo-os de seguida com o máximo de precisão possível para o tipo de dados utilizado (float).


#include <stdio.h>
int main(){
    float x = 1.1;
    float y = 123.1;
    float z = 123.2;
    printf("x = %f\n", x);
    printf("y = %f\n",y);
    printf("z = %f\n", z);
    return 0;
}

Output resultante da execução do programa.

x = 1.100000
y = 123.099998
z = 123.199997

Foi ao tentar compreender este facto que me cruzei com os  números Aleph , mas como espero possam entender, não me vou adiantar muito neste terreno tão matemático.
O tipo de dados float apenas pode representar um gama de valores pertencentes a um conjunto de cardinalidade infinita ( Aleph-um), pelo que importa aqui reter que nunca vamos conseguir uma representação exacta das grandezas contínuas. É fundamental escolhermos um tipo de dados adequado aos dados que pretendemos tratar.
No que à programação em Linguagem C diz respeito, e quando o que estiver em causa forem este tipo de questões, talvez seja bom pensarmos noutra linguagem mais orientada para o cálculo científico.

Espero não ter atropelado nenhum conceito matemático pelo caminho mas, daqui em diante, muito cuidado com os números Reais quando estivermos a utilizar todas as aplicações que os manipulam.

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s