Академический Документы
Профессиональный Документы
Культура Документы
Ponto flutuante (do ingls floating point) ou vrgula flutuante[1] um formato de representao digital de nmeros reais, que usada nos computadores. O nmero dividido numa mantissa (M) e um expoente (E). O valor representado obtido pelo produto: M 2E Desta forma possvel cobrir um largo espectro de nmeros, maximizando o nmero de bits significativos e consequentemente a preciso da aproximao. Esta forma de representao foi criada por Konrad Zuse para os seus computadores Z1 e Z3. O nmero de bits alocados para representar a mantissa e o expoente depende da norma utilizada. A maioria dos sistemas que operam com ponto flutuante utilizam representaes definidas na norma IEEE 754. A Norma IEEE 754-2008 define os formatos adequados para representar nmeros em ponto flutuante de preciso simples (32 bits) e de preciso dupla (64 bits). O formato de ponto flutuante de preciso simples (32 bits) consiste num bit de sinal (s), 8 bits de expoente (e) e uma mantissa de 23 bits (m). O bit de sinal (s) 0 (zero) para nmeros positivos e 1 para nmeros negativos. O campo de expoente (e) corresponde soma de 127 com o expoente de base 2 do nmero representado. O campo de mantissa (m) corresponde parte fracionria da mantissa do nmero representado. Considera-se a sempre a mantissa normalizada entre 1 e 2. Desta forma a sua parte inteira sempre apenas um bit igual a 1 (um) que no necessrio representar. v = S M 2E Onde: S=12s M = 1.m = 1 + m 223 E = e 127
A frao decimal: 0,125 representada por: 1/10 + 2/100 + 5/1000. Da mesma forma, a frao binria: 0,001 tem valor: 0/2 + 0/4 + 1/8. Os dois valores so idnticos, sendo o primeiro escrito na base 10 e o segundo na base 2. Valor 1 -1 0,5 -0,5 0,15625 S M 2E 1 1 20 -1 1 20 1 1 21 -1 1 21 1 1,25 23 s m e IEEE 754 - Single Precision 0 0x00 127 0 0111 1111 000 0000 0000 0000 0000 0000 1 0x00 127 1 0111 1111 000 0000 0000 0000 0000 0000 0 0x00 126 0 0111 1110 000 0000 0000 0000 0000 0000 1 0x00 126 1 0111 1110 000 0000 0000 0000 0000 0000 0 0x200000 124 0 0111 1100 010 0000 0000 0000 0000 0000
0,333 e assim por diante. No existe uma frao finita capaz de resultar em exatamente 1/3. Um outro exemplo interessante a frao 1/10. Em muitas linguagens de programao, apesar de rotinas de impresso mostrar o valor 0,100000, se exibirmos o nmero com maior preciso (por exemplo, 20 casas decimais), veremos que o valor real armazendo ser algo aproximado de: 0,10000000149001612000 (o valor pode mudar segundo o hardware e a linguagem utilizada). Assim, ao programar preciso ter cuidado com nmeros em ponto flutuante, em especial com acumuladores e comparaes.