12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- Veio do texto "introducao_caracteres.html" de 2017/05/01
- <a name="pontoflutuante"><span style="color: #0050A0">Representação em ponto flutuante</span></a>
- <p>
- A técnica de representação de números em <b>ponto flutuante</b> consiste em separar os <em>bits</em> do número
- em duas partes, além do sinal, a <b>mantissa</b> e o <b>expoente</b>, da seguinte forma:
- <center>
- <tt>b<sup>e</sup> x 0.d<sub>1</sub>d<sub>1</sub>...d<sub>p-1</sub></tt>,
- <tt>b</tt> é a base (binário ou decimal), o expoente <tt>e</tt> e a precisão <tt>p</tt>.
- </center>
- O número <tt>0.d<sub>1</sub>d<sub>1</sub>...d<sub>p-1</sub></tt> é a <b>mantissa</b>.
- </p>
- <p>
- Esta técnica de representação é a mais utilizada nos computadores, ela utilizar um <em>bit</em> para sinal,
- uma quantidade pequena de <em>bits</em> para o expoente e uma quantidade maior de <em>bits</em> para a parte "principal" do
- número. Em um dos padrões de representação (IEEE 754) o número é representado com 11 <em>bits</em> para o expoente e
- 52 <em>bits</em> para a mantissa.
- </p>
- <a name="exemplo"><span style="color: #0050A0">Exemplo de representação em ponto flutuante</span></a>
- <p>
- 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 <em>bits</em> para o expoente, assim teríamos
- <tt>p=3</tt> e <tt>-3<=e<=1</tt>.
- A lógica utilizada para separar os 4 possíveis binários (<tt>00</tt>, <tt>01</tt>, <tt>10</tt> e <tt>11</tt>)
- foi: o primeiro <em>bit</em> ligado implica valor negativo, mas o binário <tt>10</tt> é ignorado (por corresponder ao
- decimal <tt>-0</tt>, assim <tt>-1<u><</u>e<u><</u>1</tt>.
- </p>
- <p>
- Deste modo, o maior valor real que pode ser representado seria o <tt>9.99</tt>, pois tomando a maior mantissa e maior
- expoente, teríamos <tt>10<sup>1</sup> x 0.999 = 9.99</tt>,
- </p>
- <p>
- Já o menor positivo seria o <tt>0.0001</tt>, pois tomando a menor mantissa positiva e menor expoente possível (-1),
- teríamos <tt>10<sup>-1</sup> x 0.001 = 0.0001</tt>,
- </p>
- <a name="io"><span style="color: #0050A0">Entrada e saída de flutuantes em <i>C</i> e em <i>Python</i></span></a>
- <p>
- Em <i>C</i> deve-se utilizar o formatador <tt>%f</tt> para indicar que os <em>bits</em> devem ser tratados como número
- em ponto flutuante, enquanto em <i>Python</i> deve-se utilizar a função <tt>float(...)</tt>, como indicado no exemplo
- abaixo.
- <center>
- <a name="tab2">
- Tab. 4. Sobre a leitura de caracteres em <i>C</i> e em <i>Python</i></a>
- <br/>
- <table class="tbCodeLinCol">
- <tr><th>C </th> <th>Python 2</th> <th>Python 3</th></tr>
- <tr valign="top"><td><table class="tbCode">
- <tr><td><pre>// 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"
- </pre></td></tr>
- </table></td>
- <td><table class="tbCode"><pre># 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)
- </pre></td></tr>
- </table></td>
- <td><table class="tbCode"><pre># 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)
- </pre></td></tr>
- </table></td>
- </tr>
- </table></center>
- </p>
- <p>
- Aos alunos estudando com a linguagem <i>C</i>, tomem um <b>cuidado adicional</b>: o compilador <i>C</i> 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 <tt>float x=1.5;</tt>
- e fizer <tt>printf("x=%d\n", x);</tt>, não haverá erro de compilação e será impresso <tt>x=1</tt>.
- </p>
|