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.