• Like
FORTRAN 90 - Representacao numeroscomputador
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

FORTRAN 90 - Representacao numeroscomputador

  • 847 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
847
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
10
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. OS DOIS TIPOS FUNDAMENTAIS DE NÚMEROS Quando o primeiro processador FORTRAN foi desenvolvido em 1954 ele introduziuduas maneiras bem diferentes de armazenar números e de realizar operações aritméticas. Elaspraticamente não sofreram alterações no Fortran desde aquela época e, portanto, é importante sabercomo elas se diferem e como são. Um integer é um número inteiro, sendo armazenado na memória do computador semqualquer parte decimal (ou fracionária). Entretanto, sempre haverá uma limitação ao tamanho dosnúmeros inteiros devido à maneira que são armazenadas. Estes limites variam de um computadorpara outro e dependem do desenho físico da memória do computador. É possível ilustrar istoconsiderando um computador hipotético que armazena os seus dados na forma decimal, ao invés dosistema binário (base 2) usado pelos computadores. Isto significa que um único dígito seráregistrado por meio de um dispositivo que tem 10 estados (correspondentes a cada um dos 10dígitos), ao invés de um dispositivo que tem apenas 2 estados (por exemplo, ligado e desligado).Cada local na memória usada para o armazenamento de inteiros consistirá de um número fixodestes dispositivos. Suponha que, para fins de ilustração, oito dispositivos são usados, que limitará otamanho do número em até 99 999 999. Ainda falta a questão do sinal dos números. (a) 0 0 0 0 0 0 0 0 leitura inicial do odômetro (b) 0 0 0 0 0 0 0 2 leitura após dois quilômetros (c) 0 0 0 0 0 0 0 1 leitura após voltar um quilômetro (d) 0 0 0 0 0 0 0 0 leitura após voltar mais um quilômetro (e) 9 9 9 9 9 9 9 9 leitura após voltar mais um quilômetro Figura 1: Leituras do odômetro durante um trajeto. Suponha, também, que o dispositivo que armazenou o número inteiro é um odômetroeletrônico (Figura 1). Se a leitura é 00 000 000 e o carro se move por 2 quilômetros à frente (ouseja, adiciona 2 quilômetros), o odômetro mostrará 00 000 002. Entretanto, se o carro anda, emmarcha ré, por 3 quilômetros (ou seja, subtrai 3 quilômetros), o odômetro mostrará, sucessivamente,00 000 0001, 00 000 000 e, finalmente, 99 999 999. Então, a mesma leitura é obtida para um valor
  • 2. -1 assim como para +99 999 999. Pode-se adotar uma convenção que diz que os valores de 1 a 49999 999 serão considerados positivos, enquanto que os valores de 50 000 000 a 99 999 999 serãoconsiderados negativos, sendo equivalentes ao intervalo -50 000 000 a -1. Quase todos oscomputadores trabalham de maneira similar a esta. No caso do sistema binário, geralmente oprimeiro dígito binário (ou bit) é 1 para números negativos e 0 para números positivos. Usando a convenção aqui adotada é possível armazenar um número inteiro que estejadentro do intervalo de -50 000 000 até +49 999 999 (Figura 2). (a) 5 0 0 0 0 0 0 0 representa -50 000 000 (b) 5 0 0 0 0 0 0 1 representa -49 999 999 (c) 9 9 9 9 9 9 9 9 representa -1 (d) 0 0 0 0 0 0 0 0 representa 0 (e) 0 0 0 0 0 0 0 1 representa +1 (f) 4 9 9 9 9 9 9 9 representa +49 999 999 Figura 2: Armazenamento de inteiros de 8 dígitos. O outro tipo de número é chamado de número real. Um número real pode ser vistocomo um número que consiste de uma parte inteira e de um conjunto de números representando aparte fracionária. Uma maneira de armazenar este tipo de número em um local da memória de oitodígitos seria assumir que, por exemplo, os primeiros quatro dígitos estejam antes do ponto decimale os demais após. Entretanto, isto significaria que teríamos números variando apenas de -5000,0 a+4999,9999, usando a mesma convenção quanto ao sinal. Fica evidente a grande restrição, sendo,portanto, necessário outra solução para o armazenamento de um número real. Uma solução possívelseria o armazenamento de mais dígitos, mas resultaria num problema em que, em determinadassituações, uma boa quantidade destes dígitos seria desperdiçada. Por exemplo, se 16 dígitos fossemusados, o que resultaria num mesmo intervalo de valores dos números inteiros, mas com oito casasdecimais, o número 100 000 000,0 não poderia ser armazenado, pois precisa de nove dígitos antesdo ponto decimal, mesmo sabendo-se que não há necessidade dos dígitos após o ponto decimal.Além disso, um número como 0,000 000 004 teria de ser tratado como zero, pois necessitaria denove casas decimais, mesmo que nenhum dos oito dígitos anteriores ao ponto decimal são
  • 3. necessários. Uma solução ao nosso computador hipotético seria considerar qualquer número realnão nulo como uma fração contida no intervalo 0,1 e 1,0, chamada de mantissa, que é multiplicadaou dividida por 10, um certo número de vezes, sendo este número chamado de expoente. Então, 100000 000,0 seria o mesmo que 0,1 x 109 e 0,000 000 004 seria o mesmo que 0,4 ÷ 108 ou 0,4 x 10-8. (a) 0 3 4 1 3 7 0 2 representa 0,413702 x 103 = 413,702 (b) 0 4 6 8 4 9 1 5 representa -0,315085 x 104 = -3 150,85 (c) 9 7 4 1 3 7 0 2 representa 0,413702 x 10-3 = 0,000 413 702 (d) 9 8 6 8 4 9 1 5 representa -0,315 085 x 10-2 = -0,003 150 85 Figura 3: Números de ponto flutuante. Usando este caminho, podemos definir um método de representação que dirá, porexemplo, que os últimos seis dígitos representam a mantissa como uma fração de seis casasdecimais (com a primeira sendo não nula), enquanto que os primeiros dois dígitos representam oexpoente. A mesma técnica usada para distinguir o sinal dos valores inteiros será usada para amantissa e para o expoente. A Figura 3 ilustra este método, que é conhecido como representação deponto flutuante. Este método de representação tem duas implicações importantes: 1. Todos os números, independente do tamanho, são armazenados com o mesmo grau de precisão, e 2. Os limites para o tamanho dos números são muito maiores que para o caso dos inteiros. Em nosso computador hipotético, por exemplo, os números reais podem “cair” emqualquer lugar dentro do intervalo de -5 x 1048 a +4,99999 x 1048 e, ao mesmo tempo, o menornúmero que pode ser diferenciado de zero é 0,1 x 10 -50 (ou seja, 10-51). Neste computador, portanto,o número 03413702 representa o valor real de 413,702 ou o valor inteiro de 3413702, dependendose ele será interpretado como um número de ponto flutuante ou um número inteiro. Note que não hánada no número 03413702 para indicar qual das duas representações deve ser usada. Neste exemplohipotético, esta tarefa seria de responsabilidade do programador. Em um computador real, este problema de distinção da representação do númerotambém deve ser claramente definido. No Fortran, o programador informa ao computador qual o
  • 4. tipo de número a ser usado por meio da declaração de variável. Em sua forma mais simples, elatem a formaTIPO :: <nome da variável>sendo TIPO a especificação do tipo do(s) dado(s) para o(s) qual(is) deve ser reservado espaço emmemória e <nome da variável> é o nome escolhido pelo programador para se referir à variáveldeclarada. O exemplo abaixoREAL :: a, b, cdeclara três variáveis a, b e c que conterão números em ponto flutuante. Já o exemplo seguinteINTEGER :: x, y, zdeclara três variáveis x, y e z que conterão números inteiros. É extremamente importante que a diferença entre um número inteiro e um número realseja completamente apreciada: • Um número inteiro é armazenado exatamente como ele é na memória do computador e tem um intervalo de valores relativamente limitado: entre aproximadamente -2 x 10 9 e +2 x 109 e um computador comum de 32 bits. • Um número real, representado como um número de ponto flutuante, é armazenado como uma aproximação a um número fixo de dígitos significativos e tem um intervalo de valores muito grande: tipicamente entre -1038 e +1038 a sete ou oito dígitos significativos em um computador comum de 32 bits.NOTA IMPORTANTE: é altamente recomendado o uso da declaração IMPLICIT NONE naprimeira linha do programa logo após a declaração PROGRAM. Esta boa prática de programaçãoevita a utilização de declarações implícitas e confusões em programas longos.FONTE: ELLIS, T. M. R.; PHILIPS, I. R.; LAHEY, T. M. Fortran 90 Programming. New York:Addison-Wesley. 1994. 825p.