Escolar Documentos
Profissional Documentos
Cultura Documentos
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].
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
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
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.