SlideShare uma empresa Scribd logo
1 de 4
Baixar para ler offline
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
-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
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
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 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 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.

Mais conteúdo relacionado

Mais procurados

Séries fourier cap_4 Funções Pares
Séries fourier cap_4 Funções ParesSéries fourier cap_4 Funções Pares
Séries fourier cap_4 Funções ParesCiro Marcus
 
Séries fourier cap_5 Desenvolvimento em Meio Período
Séries fourier cap_5 Desenvolvimento em Meio PeríodoSéries fourier cap_5 Desenvolvimento em Meio Período
Séries fourier cap_5 Desenvolvimento em Meio PeríodoCiro Marcus
 
Séries fourier cap_2 Relações Trigonométricas Elementares
Séries fourier cap_2 Relações Trigonométricas ElementaresSéries fourier cap_2 Relações Trigonométricas Elementares
Séries fourier cap_2 Relações Trigonométricas ElementaresCiro Marcus
 
Org arq comp_2008_aula_09
Org arq comp_2008_aula_09Org arq comp_2008_aula_09
Org arq comp_2008_aula_09Jefferson Silva
 
Exercícios Análise Combinatória
Exercícios Análise CombinatóriaExercícios Análise Combinatória
Exercícios Análise Combinatórialilinhask8
 
Números fracionários
Números fracionáriosNúmeros fracionários
Números fracionáriostcrisouza
 
Apostila: Introdução a Limite, Derivada e Integral
Apostila: Introdução a Limite, Derivada e IntegralApostila: Introdução a Limite, Derivada e Integral
Apostila: Introdução a Limite, Derivada e IntegralMaria Teresa Thomaz
 
Frações decimais e números decimais 2 recuperada
Frações decimais e números decimais 2 recuperadaFrações decimais e números decimais 2 recuperada
Frações decimais e números decimais 2 recuperadatcrisouza
 
Séries fourier cap_3 Exemplos de Séries de Fourier
Séries fourier cap_3 Exemplos de Séries de FourierSéries fourier cap_3 Exemplos de Séries de Fourier
Séries fourier cap_3 Exemplos de Séries de FourierCiro Marcus
 
Números racionais representação fracionária e decimal - operações e proprie...
Números racionais   representação fracionária e decimal - operações e proprie...Números racionais   representação fracionária e decimal - operações e proprie...
Números racionais representação fracionária e decimal - operações e proprie...Camila Rodrigues
 
Cap9 - exemplos resolvidos em matlab
Cap9 - exemplos resolvidos em matlabCap9 - exemplos resolvidos em matlab
Cap9 - exemplos resolvidos em matlabSandro Sena
 
Representaçao decimal e fracionaria
Representaçao decimal e fracionariaRepresentaçao decimal e fracionaria
Representaçao decimal e fracionariasandramariadeise
 
005 programando em python - tuplas e strings
005   programando em python - tuplas e strings005   programando em python - tuplas e strings
005 programando em python - tuplas e stringsLeandro Barbosa
 
Programando em python tipos basicos
Programando em python   tipos basicosProgramando em python   tipos basicos
Programando em python tipos basicossamuelthiago
 
A regra de cramer é uma das maneiras de resolver um sistema linear, mas só po...
A regra de cramer é uma das maneiras de resolver um sistema linear, mas só po...A regra de cramer é uma das maneiras de resolver um sistema linear, mas só po...
A regra de cramer é uma das maneiras de resolver um sistema linear, mas só po...Evonaldo Gonçalves Vanny
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Júlio Rocha
 

Mais procurados (20)

Séries fourier cap_4 Funções Pares
Séries fourier cap_4 Funções ParesSéries fourier cap_4 Funções Pares
Séries fourier cap_4 Funções Pares
 
Séries fourier cap_5 Desenvolvimento em Meio Período
Séries fourier cap_5 Desenvolvimento em Meio PeríodoSéries fourier cap_5 Desenvolvimento em Meio Período
Séries fourier cap_5 Desenvolvimento em Meio Período
 
Séries fourier cap_2 Relações Trigonométricas Elementares
Séries fourier cap_2 Relações Trigonométricas ElementaresSéries fourier cap_2 Relações Trigonométricas Elementares
Séries fourier cap_2 Relações Trigonométricas Elementares
 
Org arq comp_2008_aula_09
Org arq comp_2008_aula_09Org arq comp_2008_aula_09
Org arq comp_2008_aula_09
 
Exercícios Análise Combinatória
Exercícios Análise CombinatóriaExercícios Análise Combinatória
Exercícios Análise Combinatória
 
Números fracionários
Números fracionáriosNúmeros fracionários
Números fracionários
 
Apostila: Introdução a Limite, Derivada e Integral
Apostila: Introdução a Limite, Derivada e IntegralApostila: Introdução a Limite, Derivada e Integral
Apostila: Introdução a Limite, Derivada e Integral
 
Frações decimais e números decimais 2 recuperada
Frações decimais e números decimais 2 recuperadaFrações decimais e números decimais 2 recuperada
Frações decimais e números decimais 2 recuperada
 
Séries fourier cap_3 Exemplos de Séries de Fourier
Séries fourier cap_3 Exemplos de Séries de FourierSéries fourier cap_3 Exemplos de Séries de Fourier
Séries fourier cap_3 Exemplos de Séries de Fourier
 
Fourier
FourierFourier
Fourier
 
Números racionais representação fracionária e decimal - operações e proprie...
Números racionais   representação fracionária e decimal - operações e proprie...Números racionais   representação fracionária e decimal - operações e proprie...
Números racionais representação fracionária e decimal - operações e proprie...
 
Complexidade algoritmos
Complexidade algoritmosComplexidade algoritmos
Complexidade algoritmos
 
Cap9 - exemplos resolvidos em matlab
Cap9 - exemplos resolvidos em matlabCap9 - exemplos resolvidos em matlab
Cap9 - exemplos resolvidos em matlab
 
Representaçao decimal e fracionaria
Representaçao decimal e fracionariaRepresentaçao decimal e fracionaria
Representaçao decimal e fracionaria
 
005 programando em python - tuplas e strings
005   programando em python - tuplas e strings005   programando em python - tuplas e strings
005 programando em python - tuplas e strings
 
Programando em python tipos basicos
Programando em python   tipos basicosProgramando em python   tipos basicos
Programando em python tipos basicos
 
A regra de cramer é uma das maneiras de resolver um sistema linear, mas só po...
A regra de cramer é uma das maneiras de resolver um sistema linear, mas só po...A regra de cramer é uma das maneiras de resolver um sistema linear, mas só po...
A regra de cramer é uma das maneiras de resolver um sistema linear, mas só po...
 
python.tipos
python.tipospython.tipos
python.tipos
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.
 
Sistema Lineares
Sistema LinearesSistema Lineares
Sistema Lineares
 

Semelhante a Os dois tipos fundamentais de números em Fortran

FORTRAN 90 - Calculos numericos
FORTRAN 90 - Calculos numericosFORTRAN 90 - Calculos numericos
FORTRAN 90 - Calculos numericosDafmet Ufpel
 
Introducao Computacao Slide 1
Introducao Computacao Slide 1Introducao Computacao Slide 1
Introducao Computacao Slide 1Duílio Andrade
 
Cálculo Numérico
Cálculo NuméricoCálculo Numérico
Cálculo NuméricoSandro Lima
 
Operacoes numeros decimais
Operacoes numeros decimaisOperacoes numeros decimais
Operacoes numeros decimaisEquipe_FAETEC
 
Introdução a Microcontroladores PIC
Introdução a Microcontroladores PICIntrodução a Microcontroladores PIC
Introdução a Microcontroladores PICChellton Almeida
 
Sistemas digitais - Sistemas de Numeração
Sistemas digitais - Sistemas de NumeraçãoSistemas digitais - Sistemas de Numeração
Sistemas digitais - Sistemas de NumeraçãoCarlos Pereira
 
Principios da microprogramacao
Principios da microprogramacaoPrincipios da microprogramacao
Principios da microprogramacaoMarcelle Guiné
 
O processamento binário
O processamento binárioO processamento binário
O processamento bináriocabaldreams
 
Aula - conversao de bases.pdf
Aula - conversao de bases.pdfAula - conversao de bases.pdf
Aula - conversao de bases.pdfRodneyTeixeira2
 
1 - Sistemas de Numeração.ppt
1 - Sistemas de Numeração.ppt1 - Sistemas de Numeração.ppt
1 - Sistemas de Numeração.pptJoberthSilva
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeraçãoPonesa Carlos
 

Semelhante a Os dois tipos fundamentais de números em Fortran (20)

FORTRAN 90 - Calculos numericos
FORTRAN 90 - Calculos numericosFORTRAN 90 - Calculos numericos
FORTRAN 90 - Calculos numericos
 
Introducao Computacao Slide 1
Introducao Computacao Slide 1Introducao Computacao Slide 1
Introducao Computacao Slide 1
 
Calculo numerico
Calculo numerico Calculo numerico
Calculo numerico
 
PARTE 5 - Bases Especiais
PARTE 5 - Bases EspeciaisPARTE 5 - Bases Especiais
PARTE 5 - Bases Especiais
 
Cálculo Numérico
Cálculo NuméricoCálculo Numérico
Cálculo Numérico
 
Edg cap01
Edg cap01Edg cap01
Edg cap01
 
Operacoes numeros decimais
Operacoes numeros decimaisOperacoes numeros decimais
Operacoes numeros decimais
 
Introdução a Microcontroladores PIC
Introdução a Microcontroladores PICIntrodução a Microcontroladores PIC
Introdução a Microcontroladores PIC
 
Sistemas digitais - Sistemas de Numeração
Sistemas digitais - Sistemas de NumeraçãoSistemas digitais - Sistemas de Numeração
Sistemas digitais - Sistemas de Numeração
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeração
 
Tabela de conversao
Tabela de conversaoTabela de conversao
Tabela de conversao
 
Sistema binario
Sistema binarioSistema binario
Sistema binario
 
Sistemas digitais 1
Sistemas digitais 1Sistemas digitais 1
Sistemas digitais 1
 
Principios da microprogramacao
Principios da microprogramacaoPrincipios da microprogramacao
Principios da microprogramacao
 
O processamento binário
O processamento binárioO processamento binário
O processamento binário
 
Aula - conversao de bases.pdf
Aula - conversao de bases.pdfAula - conversao de bases.pdf
Aula - conversao de bases.pdf
 
1 - Sistemas de Numeração.ppt
1 - Sistemas de Numeração.ppt1 - Sistemas de Numeração.ppt
1 - Sistemas de Numeração.ppt
 
Rocio, vitor
Rocio, vitorRocio, vitor
Rocio, vitor
 
Calculo numérico
Calculo numéricoCalculo numérico
Calculo numérico
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeração
 

Mais de Dafmet Ufpel

O desafio da modelagem de dispersão e química de poluentes
O desafio da modelagem de dispersão e química de poluentesO desafio da modelagem de dispersão e química de poluentes
O desafio da modelagem de dispersão e química de poluentesDafmet Ufpel
 
Experiências em estudos de clima urbano
Experiências em estudos de clima urbanoExperiências em estudos de clima urbano
Experiências em estudos de clima urbanoDafmet Ufpel
 
O desafio de comunicar a Meteorologia - por Estael Sias
O desafio de comunicar a Meteorologia - por Estael SiasO desafio de comunicar a Meteorologia - por Estael Sias
O desafio de comunicar a Meteorologia - por Estael SiasDafmet Ufpel
 
Química da Estratosfera e o buraco na camada de ozônio
Química da Estratosfera e o buraco na camada de ozônioQuímica da Estratosfera e o buraco na camada de ozônio
Química da Estratosfera e o buraco na camada de ozônioDafmet Ufpel
 
Employing heisenberg’s turbulent spectral transfer theory to
Employing heisenberg’s turbulent spectral transfer theory toEmploying heisenberg’s turbulent spectral transfer theory to
Employing heisenberg’s turbulent spectral transfer theory toDafmet Ufpel
 
Eventos de Chuva Intensa na região sul do Brasil
Eventos de Chuva Intensa na região sul do BrasilEventos de Chuva Intensa na região sul do Brasil
Eventos de Chuva Intensa na região sul do BrasilDafmet Ufpel
 
Meteorologia na EACF
Meteorologia na EACFMeteorologia na EACF
Meteorologia na EACFDafmet Ufpel
 
Mudanças climaticas samet
Mudanças climaticas   sametMudanças climaticas   samet
Mudanças climaticas sametDafmet Ufpel
 
Apresentação redec 4 evento 07-12-2012
Apresentação redec 4   evento 07-12-2012Apresentação redec 4   evento 07-12-2012
Apresentação redec 4 evento 07-12-2012Dafmet Ufpel
 
Seminário samet 2012
Seminário samet 2012Seminário samet 2012
Seminário samet 2012Dafmet Ufpel
 
Estratosfera semana acadêmica
Estratosfera   semana acadêmicaEstratosfera   semana acadêmica
Estratosfera semana acadêmicaDafmet Ufpel
 
Meteorologia aplicada aos ecossistemas santiago vianna cuadra
Meteorologia aplicada aos ecossistemas   santiago vianna cuadraMeteorologia aplicada aos ecossistemas   santiago vianna cuadra
Meteorologia aplicada aos ecossistemas santiago vianna cuadraDafmet Ufpel
 
Semana acadêmica ufpel
Semana acadêmica ufpelSemana acadêmica ufpel
Semana acadêmica ufpelDafmet Ufpel
 
Edital de convocacao para as eleicoes do dafmet 2012
Edital de convocacao para as eleicoes do dafmet 2012Edital de convocacao para as eleicoes do dafmet 2012
Edital de convocacao para as eleicoes do dafmet 2012Dafmet Ufpel
 
vaga de estagio 2011 - Meteorologia
vaga de estagio 2011 - Meteorologiavaga de estagio 2011 - Meteorologia
vaga de estagio 2011 - MeteorologiaDafmet Ufpel
 
A experiência do SIMEPAR no monitoramento de tempestades severas
A experiência do SIMEPAR no monitoramento de tempestades severasA experiência do SIMEPAR no monitoramento de tempestades severas
A experiência do SIMEPAR no monitoramento de tempestades severasDafmet Ufpel
 
Cartaz Semana Academica
Cartaz Semana AcademicaCartaz Semana Academica
Cartaz Semana AcademicaDafmet Ufpel
 

Mais de Dafmet Ufpel (20)

O desafio da modelagem de dispersão e química de poluentes
O desafio da modelagem de dispersão e química de poluentesO desafio da modelagem de dispersão e química de poluentes
O desafio da modelagem de dispersão e química de poluentes
 
Experiências em estudos de clima urbano
Experiências em estudos de clima urbanoExperiências em estudos de clima urbano
Experiências em estudos de clima urbano
 
O desafio de comunicar a Meteorologia - por Estael Sias
O desafio de comunicar a Meteorologia - por Estael SiasO desafio de comunicar a Meteorologia - por Estael Sias
O desafio de comunicar a Meteorologia - por Estael Sias
 
Química da Estratosfera e o buraco na camada de ozônio
Química da Estratosfera e o buraco na camada de ozônioQuímica da Estratosfera e o buraco na camada de ozônio
Química da Estratosfera e o buraco na camada de ozônio
 
Employing heisenberg’s turbulent spectral transfer theory to
Employing heisenberg’s turbulent spectral transfer theory toEmploying heisenberg’s turbulent spectral transfer theory to
Employing heisenberg’s turbulent spectral transfer theory to
 
Eventos de Chuva Intensa na região sul do Brasil
Eventos de Chuva Intensa na região sul do BrasilEventos de Chuva Intensa na região sul do Brasil
Eventos de Chuva Intensa na região sul do Brasil
 
Meteorologia na EACF
Meteorologia na EACFMeteorologia na EACF
Meteorologia na EACF
 
Capincho cumulus
Capincho cumulusCapincho cumulus
Capincho cumulus
 
Mudanças climaticas samet
Mudanças climaticas   sametMudanças climaticas   samet
Mudanças climaticas samet
 
Apresentação redec 4 evento 07-12-2012
Apresentação redec 4   evento 07-12-2012Apresentação redec 4   evento 07-12-2012
Apresentação redec 4 evento 07-12-2012
 
Seminário samet 2012
Seminário samet 2012Seminário samet 2012
Seminário samet 2012
 
Estratosfera semana acadêmica
Estratosfera   semana acadêmicaEstratosfera   semana acadêmica
Estratosfera semana acadêmica
 
Meteorologia aplicada aos ecossistemas santiago vianna cuadra
Meteorologia aplicada aos ecossistemas   santiago vianna cuadraMeteorologia aplicada aos ecossistemas   santiago vianna cuadra
Meteorologia aplicada aos ecossistemas santiago vianna cuadra
 
Semana acadêmica ufpel
Semana acadêmica ufpelSemana acadêmica ufpel
Semana acadêmica ufpel
 
Samet2012
Samet2012Samet2012
Samet2012
 
Empreendedorismo
EmpreendedorismoEmpreendedorismo
Empreendedorismo
 
Edital de convocacao para as eleicoes do dafmet 2012
Edital de convocacao para as eleicoes do dafmet 2012Edital de convocacao para as eleicoes do dafmet 2012
Edital de convocacao para as eleicoes do dafmet 2012
 
vaga de estagio 2011 - Meteorologia
vaga de estagio 2011 - Meteorologiavaga de estagio 2011 - Meteorologia
vaga de estagio 2011 - Meteorologia
 
A experiência do SIMEPAR no monitoramento de tempestades severas
A experiência do SIMEPAR no monitoramento de tempestades severasA experiência do SIMEPAR no monitoramento de tempestades severas
A experiência do SIMEPAR no monitoramento de tempestades severas
 
Cartaz Semana Academica
Cartaz Semana AcademicaCartaz Semana Academica
Cartaz Semana Academica
 

Os dois tipos fundamentais de números em Fortran

  • 1. 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
  • 2. -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
  • 3. 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
  • 4. 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 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 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.