fortran 90 - representacao numeroscomputador

4
OS DOIS TIPOS FUNDAMENTAIS DE NÚMEROS Quando o primeiro processador FORTRAN foi desenvolvido em 1954 ele introduziu duas maneiras bem diferentes de armazenar números e de realizar operações aritméticas. Elas praticamente não sofreram alterações no Fortran desde aquela época e, portanto, é importante saber como elas se diferem e como são. Um integer é um número inteiro, sendo armazenado na memória do computador sem qualquer parte decimal (ou fracionária). Entretanto, sempre haverá uma limitação ao tamanho dos números inteiros devido à maneira que são armazenadas. Estes limites variam de um computador para outro e dependem do desenho físico da memória do computador. É possível ilustrar isto considerando um computador hipotético que armazena os seus dados na forma decimal, ao invés do sistema 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 10 dí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 fixo destes dispositivos. Suponha que, para fins de ilustração, oito dispositivos são usados, que limitará o tamanho 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ômetro eletrônico (Figura 1). Se a leitura é 00 000 000 e o carro se move por 2 quilômetros à frente (ou seja, adiciona 2 quilômetros), o odômetro mostrará 00 000 002. Entretanto, se o carro anda, em marcha 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

Upload: dafmet-ufpel

Post on 29-Nov-2014

1.125 views

Category:

Documents


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: FORTRAN 90 - Representacao numeroscomputador

OS DOIS TIPOS FUNDAMENTAIS DE NÚMEROS

Quando o primeiro processador FORTRAN foi desenvolvido em 1954 ele introduziu

duas maneiras bem diferentes de armazenar números e de realizar operações aritméticas. Elas

praticamente não sofreram alterações no Fortran desde aquela época e, portanto, é importante saber

como elas se diferem e como são.

Um integer é um número inteiro, sendo armazenado na memória do computador sem

qualquer parte decimal (ou fracionária). Entretanto, sempre haverá uma limitação ao tamanho dos

números inteiros devido à maneira que são armazenadas. Estes limites variam de um computador

para outro e dependem do desenho físico da memória do computador. É possível ilustrar isto

considerando um computador hipotético que armazena os seus dados na forma decimal, ao invés do

sistema 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 10

dí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 fixo

destes dispositivos. Suponha que, para fins de ilustração, oito dispositivos são usados, que limitará o

tamanho 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ômetro

eletrônico (Figura 1). Se a leitura é 00 000 000 e o carro se move por 2 quilômetros à frente (ou

seja, adiciona 2 quilômetros), o odômetro mostrará 00 000 002. Entretanto, se o carro anda, em

marcha 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

Page 2: FORTRAN 90 - Representacao numeroscomputador

-1 assim como para +99 999 999. Pode-se adotar uma convenção que diz que os valores de 1 a 49

999 999 serão considerados positivos, enquanto que os valores de 50 000 000 a 99 999 999 serão

considerados negativos, sendo equivalentes ao intervalo -50 000 000 a -1. Quase todos os

computadores trabalham de maneira similar a esta. No caso do sistema binário, geralmente o

primeiro 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 esteja

dentro 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 visto

como um número que consiste de uma parte inteira e de um conjunto de números representando a

parte fracionária. Uma maneira de armazenar este tipo de número em um local da memória de oito

dígitos seria assumir que, por exemplo, os primeiros quatro dígitos estejam antes do ponto decimal

e 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ível

seria o armazenamento de mais dígitos, mas resultaria num problema em que, em determinadas

situações, uma boa quantidade destes dígitos seria desperdiçada. Por exemplo, se 16 dígitos fossem

usados, o que resultaria num mesmo intervalo de valores dos números inteiros, mas com oito casas

decimais, o número 100 000 000,0 não poderia ser armazenado, pois precisa de nove dígitos antes

do 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 de

nove casas decimais, mesmo que nenhum dos oito dígitos anteriores ao ponto decimal são

Page 3: FORTRAN 90 - Representacao numeroscomputador

necessários.

Uma solução ao nosso computador hipotético seria considerar qualquer número real

não nulo como uma fração contida no intervalo 0,1 e 1,0, chamada de mantissa, que é multiplicada

ou dividida por 10, um certo número de vezes, sendo este número chamado de expoente. Então, 100

000 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á, por

exemplo, que os últimos seis dígitos representam a mantissa como uma fração de seis casas

decimais (com a primeira sendo não nula), enquanto que os primeiros dois dígitos representam o

expoente. A mesma técnica usada para distinguir o sinal dos valores inteiros será usada para a

mantissa e para o expoente. A Figura 3 ilustra este método, que é conhecido como representação de

ponto 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” em

qualquer lugar dentro do intervalo de -5 x 1048 a +4,99999 x 1048 e, ao mesmo tempo, o menor

nú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, dependendo

se 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 exemplo

hipotético, esta tarefa seria de responsabilidade do programador.

Em um computador real, este problema de distinção da representação do número

também deve ser claramente definido. No Fortran, o programador informa ao computador qual o

Page 4: FORTRAN 90 - Representacao numeroscomputador

tipo de número a ser usado por meio da declaração de variável. Em sua forma mais simples, ela

tem a forma

TIPO :: <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 em

memória e <nome da variável> é o nome escolhido pelo programador para se referir à variável

declarada. O exemplo abaixo

REAL :: a, b, c

declara três variáveis a, b e c que conterão números em ponto flutuante. Já o exemplo seguinte

INTEGER :: x, y, z

declara 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 real

seja 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 109 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 na

primeira linha do programa logo após a declaração PROGRAM. Esta boa prática de programação

evita 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.