Veio do texto "introducao_caracteres.html" de 2017/05/01 Representação em ponto flutuante

A técnica de representação de números em ponto flutuante consiste em separar os bits do número em duas partes, além do sinal, a mantissa e o expoente, da seguinte forma:

`be x 0.d1d1...dp-1`, `b` é a base (binário ou decimal), o expoente `e` e a precisão `p`.
O número `0.d1d1...dp-1` é a mantissa.

Esta técnica de representação é a mais utilizada nos computadores, ela utilizar um bit para sinal, uma quantidade pequena de bits para o expoente e uma quantidade maior de bits para a parte "principal" do número. Em um dos padrões de representação (IEEE 754) o número é representado com 11 bits para o expoente e 52 bits para a mantissa.

Exemplo de representação em ponto flutuante

Para ilustrar o funcionamento de ponto flutuante, suponha um computador que use decimal para a mantissa e binário para expente. Se o computador tiver apenas 3 dígitos para mantissa e 2 bits para o expoente, assim teríamos `p=3` e `-3<=e<=1`. A lógica utilizada para separar os 4 possíveis binários (`00`, `01`, `10` e `11`) foi: o primeiro bit ligado implica valor negativo, mas o binário `10` é ignorado (por corresponder ao decimal `-0`, assim `-1<e<1`.

Deste modo, o maior valor real que pode ser representado seria o `9.99`, pois tomando a maior mantissa e maior expoente, teríamos `101 x 0.999 = 9.99`,

Já o menor positivo seria o `0.0001`, pois tomando a menor mantissa positiva e menor expoente possível (-1), teríamos `10-1 x 0.001 = 0.0001`,

Entrada e saída de flutuantes em C e em Python

Em C deve-se utilizar o formatador `%f` para indicar que os bits devem ser tratados como número em ponto flutuante, enquanto em Python deve-se utilizar a função `float(...)`, como indicado no exemplo abaixo.

Tab. 4. Sobre a leitura de caracteres em C e em Python

C | Python 2 | Python 3
--- | --- | ---

    // Vale notar: se usuario digitar uma "string", como
    // "nome", apenas o caractere 'n' vai para x
    float x; // declaracao de variavel em "ponto flutuante"
    scanf("%f", &x); // leia como "ponto flutuante"
    printf("%f", x); // imprima como "ponto flutuante"

    # Vale notar: se o usuario digitar uma "string", como
    # "nome", a variavel x recebera' a "string" toda
    x = raw_intput() # leia como "ponto flutuante"
    print(x)

    # Vale notar: se o usuario digitar uma "string", como
    # "nome", a variavel x recebera' a "string" toda
    x = intput() # leia como "ponto flutuante"
    print(x)

Aos alunos estudando com a linguagem C, tomem um cuidado adicional: o compilador C aceita utilizar o formatador de inteiro na leitura e na impressão de uma variável em flutuante. Ele trunca o valor, assim se tiver `float x=1.5;` e fizer `printf("x=%d\n", x);`, não haverá erro de compilação e será impresso `x=1`.