Você está na página 1de 8

Aritmtica de Ponto Flutuante e

texto redigido por Mrcia A GomesRuggiero a Entre 1970 e 1980 um grupo formado por cientistas e engenheiros de diferentes empresas de computao realizou um trabalho intenso na tentativa de encontrar um padro ca a de representao dos nmeros, que deveria ser adotado por todas as indstrias na consca u u truo de seus computadores. A necessidade desta padronizao tinha como principal ca ca objetivo uniformizar os resultados obtidos por um mesmo programa computacional executado em diferentes mquinas, [1]. a Esta discusso teve in em 1976, e este grupo de trabalho cou conhecido como a cio IEEEp754, pois foi organizado pelo Institute for Electrical and Electronics Engineers IEEE. Entre os fabricantes estavam Apple, Zilog, DEC, Intel, Hewlett-Packard, Motorola e National Semiconductor. O prof. William Kahan liderava o grupo de cientistas e pelo trabalho desenvolvido neste projeto, recebeu o prmio Turing Prize em 1989, [1]. e Este projeto tinha como metas principais: especicar como representar os nmeros em preciso simples e dupla; u a padronizar o arredondamento nas operaes neste sistema; co estabelecer critrios para padronizar situaes como diviso por zero, operaes e co a co envolvendo innito. Em 1985 o resultado deste trabalho foi publicado e cou conhecido ocialmente como ANSI/IEEE Std 754-1985, [2].

Representao em preciso simples e dupla ca a


A base numrica no padro IEEE754 a binria. Neste padro so adotados dois e a e a a a formatos para representao de nmeros: preciso simples e preciso dupla. (Na base ca u a a binria, um d a gito binrio denominado bit e um byte um conjunto de 8 bits). a e e Ficou estabelecido que no padro IEEE754, em preciso simples, um nmero real a a u seria representado por 32 bits, (4 bytes), sendo que: 1

1 bit reservado para o sinal do nmero (positivo ou negativo); e u 8 bits so reservados para o expoente da base, que um nmero inteiro; a e u 23 bits so reservados para a mantissa: a e1 e2 . . . e8 d1 d2 . . . d23

Sobre a representao do expoente e: ca os 8 bits reservados para representar o expoente devem conter tambm a informao do e ca sinal deste expoente. No padro IEEE754, a sequncia de 8 bits armazena o nmero a e u s = e + 127. Desta forma, evitase o teste sobre o valor do bit para saber se o nmero u positivo ou negativo e para recuperar o expoente, realizada a operao e = s 127. e e ca Alguns exemplos: (lembrando que (127)10 = (1111111)2 ): e = (1)10 = (1)2 armazenado como: (1111111)2 + (1)2 = (10000000)2 ; e e = (3)10 = (11)2 armazenado como: (1111111)2 + (11)2 = (10000010)2 ; e e = (3)10 = (11)2 armazenado como: (1111111)2 (11)2 = (01111100)2 ; e e = (52)10 = (110100)2 armazenado como: (1111111)2 + (110100)2 = (10110011)2 . e Para obter a forma como o expoente ser armazenado podemos tambm trabalhar a e na base 10 e depois converter o resultado nal. Por exemplo, se e = (52)10 iremos armazenar (127)10 + (52)10 = (179)10 = (10110011)2 . E importante destacar que as sequncias de bits para o expoente: (00000000) e e (11111111) so reservadas para representar o zero, e innito ou ocorrncia de erro (NaN: a e not a number) respectivamente. O maior expoente representado pela sequncia (11111110)2 que, na base 10, repree e senta o nmero (256 2)10 = (254)10 . Ento o maior expoente : 127 + e = 254 e = u a e 254 127 = 127. O menor expoente representado pela sequncia (00000001)2 = (1)10 . Da temos e e que o menor expoente : 127 + e = 1 e = 1 127 = 126. e Considerando agora a representao da mantissa. Vimos que no sistema normalizado ca d1 = 0. Dado que a base dois, teremos que o primeiro d e gito no sistema normalizado ser sempre igual a 1 e por esta razo no armazenado. E o denominado bit escona a a e dido. Esta normalizao permite um ganho na preciso, pois podemos considerar que a ca a mantissa armazenada em 24 bits. e 2

Por exemplo, o nmero (1/8)10 = (0.125)10 = (0.001)2 ser assim armazenado: u a

0 01111100 0000 . . . 0 pois, o expoente 3 representando pela sequncia (01111100)2 conforme vimos e e anteriormente, e a mantissa tem apenas um d gito signicativo, que armazenado no bit e escondido, pois o sistema normalizado. Logo, os 23 bits para a mantissa cam iguais e a zero. Considerando agora o nmero: u (0.1)10 = (0.00011001100110011 . . .)2 = (1.1001100110011 . . .)2 24 . Temos que o expoente e = (4)10 = (100)2 ser assim representado: (127)10 + (4)10 = a (123)10 = (01111011)2 . O nmero (0.1)10 ser armazenado como: u a 0 01111011 10011001100110011001100 A menor mantissa 0.1 e o menor expoente (00000001)2 , ento o menor nmero e a u 126 126 38 positivo que pode ser armazenado (1.000000 . . .)2 2 e =2 1.2 10 . No formato IEEE754 teremos este nmero assim representado: u 0 00000001 00000000000000000000000 O maior nmero positivo ter como mantissa um nmero com 24 bits iguais a um e u a u como expoente (11111110)2 = (1.1111 . . . 11)2 2127 = (2223 )2127 2128 3.41038 . No formato IEEE754 teremos este nmero assim representado: u 0 11111110 11111111111111111111111 Qualquer resultado acima de +3.4 1038 ou abaixo de 3.4 1038 resultar em a (overow) e sero representados por: a

1 11111111 00000000000000000000000 0 11111111 00000000000000000000000 O zero representado com as sequncias de bits todos nulos tanto para o expoente e e quanto para a mantissa: 0 00000000 00000000000000000000000 Se a sequncia de bits para o expoente for nula e a sequncia de bits para a mantissa e e for no nula ento, temos a ocorrncia de nmeros menores que 2126 1.2 1038 , que a a e u no estaro na forma normalizada, isto , o primeiro d a a e gito da mantissa no ser igual a a a 1. Por exemplo: 0 00000000 1000000000000000000000 representa (21 2126 ) = 2127 e 0 00000000 00000000000000000000001 representa (223 2126 ) = 2149 . Se a sequncia de bits para o expoente for composta por todos d e gitos iguais a um e a sequncia de bits para a mantissa for no nula ento temos o ocorrncia dos denominados e a a e NaN: Not a Number, que representam resultados de expresses invlidas como: o a 0 ; 0/0; /; . H um consenso que certas expresses, ainda que envolvam ou zero, tenham um a o resultado plaus vel, tais como: z 0 = 0; z/0 = +, se z > 0; 4

z/0 = , se z < 0; z = . + = . Observamos que a justicativa para a conveno em se adotar NaN para segue ca do estudo de limite de sequncias. Por exemplo, se duas sequncias, zk e wk divergem e e para +, ento, a adio dos termos de sequncia, resultar em outra sequncia, tk = a ca e a e zk + wk , que tambm diverge para +. Porm, se subtrairmos os termos das sequncias, e e e tk = zk wk , nada poderemos armar sobre a sequncia resultante, pois o seu limite e depender da rapidez de convergncia de cada sequncia envolvida. a e e Em alguns casos, pode ser necessrio trabalhar com precises maiores, ou ainda, a o pode ser necessrio trabalhar com nmeros bastante grandes ou muito pequenos. Para a u estes casos, conveniente trabalhar com o sistema de preciso dupla, que permite uma e a preciso maior para a mantissa e tambm intervalos maiores para o expoente. a e No sistema de preciso dupla, so reservados 64 bits (8 bytes) para armazenar um a a nmero real, sendo que: u 1 bit reservado para o sinal do nmero (positivo ou negativo); e u 11 bits so reservados para o expoente da base, que um nmero inteiro; a e u 52 bits so reservados para a mantissa: a e1 e2 . . . e11 d1 d2 . . . d52

Analisando os bits reservados para o expoente, e seguindo a conveno descrita anca teriormente para a representao deste expoente, teremos que no sistema de preciso ca a dupla o expoente representado por s = 1023 + e, uma vez que a sequncia de 10 bits e e iguais a 1 corresponde a 210 1 = 1023. O menor expoente no sistema de preciso dupla a representado pela sequncia de bits: 00000000001 e, portanto, e = 1 1023 = 1022. e e E, o maior expoente representado neste sistema ser dado pela sequncia de bits, a e 11 11111111110, que corresponde ao nmero 2 2 = 2046. Da teremos 2046 = 1023+e u , e = 2046 1023 = 1023. O menor nmero positivo ser: 1.00000...021022 2.333210302 e o maior nmero u a u positivo ser: 1.1111.....1 21023 (2 252 ) 21023 1.7977 10308 . a

Operaes em Aritmtica de Ponto Flutuante co e


Para simplicar o entendimento sobre a forma como so realizadas as operaes em a co ponto utuante, vamos supor um sistema de aritmtica em ponto utuante que trabalha e com 4 d gitos na mantissa, na base 10, expoente e no intervalo e [5 5]. Considerando que x = 0.9370 104 e y = 0.1272 102 esto representados exatamente a vamos realizar a adio de x com y e representar o valor resultante neste sistema. ca A adio em ponto utuante requer que as parcelas tenham o mesmo expoente para ca que as mantissas possam ser adicionadas. Para isto, a mantissa do nmero de menor u expoente deve ser deslocada para a direita. Este deslocamento deve ser de um nmero u de casas decimais iguais ` diferena entre os dois expoentes. a c Considerando os nmeros acima, temos que alinhar a mantissa de y de modo a u escrevlo com expoente igual a 4, desta forma, y = 0.1272 102 = 0.001272 104 . e Observe que neste caso, a mantissa de y no est normalizada (primeiro d a a gito nulo) e e o nmero de dig na mantissa maior que 4. Por esta razo, temporariamente, y ser u tos e a a armazenado num acumulador de preciso dupla, pois assim, garantese uma preciso a a maior no resultado. Teremos ento: a z = x + y = 0.93700000 104 + 0.00127200 104 = 0.93827200 104 . Este o resultado exato desta operao. Dado que no sistema adotado o nmero de e ca u d gitos na mantissa igual a 4, o resultado z dever ser armazenado neste sistema. Se e a for usado o arredondamento, teremos, z = 0.9383 104 e se for usado o truncamento, teremos, z = 0.9382 104 . Consideremos agora a operao x + y, com x = 0.127 103 e y = 0.97 101 . A ca mantissa de y deve ser deslocada 4 casas para a direita: z = x + y = 0.12700000 103 + 0.00009700 103 = 0.12709700 103 . Armazenando z no sistema da mquina (4 d a gitos), teremos: z = 0.1271 103 no arredondamento. No truncamento o resultado armazenado ser z = 0.1270 103 = x a e, neste caso, podemos constatar que a parcela y no contribuiu para o resultado nal, a isto , y atuou como elemento neutro nesta adio. e ca 6

A propriedade do elemento neutro na adio de nmeros reais: (existe e unico o ca u e nmero real e tal que a + e = 0, a R), no se verica na adio em ponto utuante, u a ca pois cada nmero representado exatamente no sistema admite um conjunto de elementos u neutros. Considerando novamente, x = 0.9370 104 e y = 0.1272 102 vamos realizar a multiplicao xy e armazenar o resultado neste sistema . Na operao de multiplicao, ca ca ca realizamos o produto das mantissas e o expoente nal da base obtido, adicionando os e expoentes de cada parcela. Ento, teremos z = (0.9370 0.1272) 106 = 0.1191864 106 . a E, nalmente, z = 0.1192 106 se for efetuado o arrendodamento e z = 0.1191 106 se for efetuado o truncamento. Observamos que a propriedade associativa no se verica em aritmtica de ponto a e utuante. Para exemplicar, consideremos o clculo de w = (a b)/c onde a = 0.1000 a 3 4 1 10 , b = 0.3500 10 e c = 0.7000 10 . Calculando w atravs da sequncia de operaes: t = (a b) e w = t (1/c) teremos: e e co 3 4 a b = (0.1000 0.3500) 10 10 = 0.03500 107 = 0.3500 106 . Porm, o expoente e da base 6, que ultrapassa o limite para o maior expoente, que 5. Portanto, esta e e sequncia de operaes conduz ` ocorrncia de overow. e co a e No entanto, se efetuarmos primeiramente uma diviso, por exemplo, r = b/c, terea mos: r = b/c = (0.3500/0.7000) 104 101 = 0.5000 103 e, em seguida a multiplicao: ca a r = (0.1000 0.5000) 103 103 = 0.0500 106 = 0.5000 105 . Neste caso, o overow evitado. e

Referncias Bibliogrcas e a
[1] M. L. Overton, Numerical Computing with IEEE Floating Point Arithmetic, SIAM, Philadelphia, 2001. [2] IEEE standard for binary oatingpoint arthmetic: 7541985, 1985. Reprinted in SIGPLAN Notices, 22, http://grouper.ieee.org.groups/754/ ANSI/IEEE std pp. 925, 1987.

Você também pode gostar