Loading [MathJax]/jax/output/HTML-CSS/jax.js

Mudanças entre as edições de "Map0151"

De Stoa
Ir para: navegação, pesquisa
(Representação de números fracionários e decimais numa base)
(Representação de números fracionários e decimais numa base)
Linha 30: Linha 30:
  
 
  '''Exemplo:''' <math>0.9= [0.1110011001100...]_2</math>
 
  '''Exemplo:''' <math>0.9= [0.1110011001100...]_2</math>
 +
 +
==== Uma função para colocar um número decimal na forma binária ====
 +
{{ ipyin | n=1
 +
| c= <syntaxhighlight  enclose="none" lang="python" strict>
 +
# -*- coding: utf-8 -*-
 +
"""
 +
Spyder Editor
 +
 +
"""
 +
 +
def binario(a):
 +
    # da a representacao binaria do numero a
 +
    ParteInteira = int(a)
 +
    ParteDecimal = a-int(a)
 +
    # representacao binaria da parte inteira
 +
    # a lista seguinte guarda os dígitos da parte inteira
 +
    ListaDigitos=[]
 +
    while (ParteInteira > 0):
 +
        ListaDigitos.append(ParteInteira%2)
 +
        ParteInteira=ParteInteira//2
 +
    # lista dos digitos depois da virgula
 +
    ListaResto=[]
 +
    k=1
 +
    while ((ParteDecimal!=0)&(k<50)):
 +
        ListaResto.append(int(2*ParteDecimal))
 +
        ParteDecimal=2*ParteDecimal - int(2*ParteDecimal)
 +
        k=k+1
 +
    # produz a string de representacao:
 +
       
 +
    i=len(ListaDigitos)-1
 +
    p1=""
 +
    while (i>=0):
 +
        p1=p1+str(ListaDigitos[i])
 +
        i=i-1
 +
    # Depois disso p1 tem a parte inteira
 +
    l=0
 +
    p2=""
 +
    while (l<len(ListaResto)):
 +
        p2=p2+str(ListaResto[l])
 +
        l=l+1
 +
   
 +
    return p1+"."+p2
 +
   
 +
print (binario(21.75))
 +
</syntaxhighlight>}}

Edição das 19h19min de 19 de fevereiro de 2013

Cobra4.png

| Comunidade no Stoa | Disciplina no Moodle|

Conteúdo

 [ocultar

Números no Computador

Muitos dos algoritmos de cálculo numérico, por uma questão prática, deverão ser executados numa máquina real. Nestas máquinas, no entanto, a capacidade de memória para representação dos números é finita. Vários números reais (infinitos, de fato) terão a mesma representação no computador (ou calculadora), daí originando-se os erros de arredondamentos. Vamos ver qual é a técnica usada atualmente para diminuir os erros de arredondamentos.

Representação de números inteiros numa base

Seja β>1 um número natural. Então podemos representar qualquer número inteiro k como a soma k=sgn(k)a0β0++asβs onde cada algarismo aj representa um número natural entre 0 e β1. Só as é diferente de zero. Esta representação é única. A representação de k na base β é k=±[asa0]β Deixando o sinal de k de fora, para simplificar. Podemos calcular os algarismos do número daddo na base β aplicando repetidas vezes o algoritmo da divisão. Escrevendo k=a0+β(a1+β(a2++βas))) vemos que a0 é o resto da divisão k//β, a1 é o resto da divisão (ka0)//β e assim por diante.

Exemplo: 39=[100111]2

Representação de números fracionários e decimais numa base

Seja novamente β>1 um número natural.

Se x(0,1) então x=b1β++bkβk+ Diremos que x=[0.b1b2]β é a representação fracionária na base β de x. Quando não houver dúvidas de que base se trata, omite-se a base da notação!

Exemplo: 0.9=[0.1110011001100...]2

Uma função para colocar um número decimal na forma binária

In[1]: # -*- coding: utf-8 -*-

"""
Spyder Editor

"""


def binario(a):
    # da a representacao binaria do numero a
    ParteInteira = int(a)
    ParteDecimal = a-int(a)
    # representacao binaria da parte inteira
    # a lista seguinte guarda os dígitos da parte inteira
    ListaDigitos=[]
    while (ParteInteira > 0):
        ListaDigitos.append(ParteInteira%2)
        ParteInteira=ParteInteira//2
    # lista dos digitos depois da virgula
    ListaResto=[]
    k=1
    while ((ParteDecimal!=0)&(k<50)):
        ListaResto.append(int(2*ParteDecimal))
        ParteDecimal=2*ParteDecimal - int(2*ParteDecimal)
        k=k+1
    # produz a string de representacao:
       
    i=len(ListaDigitos)-1
    p1=""
    while (i>=0):
        p1=p1+str(ListaDigitos[i])
        i=i-1
    # Depois disso p1 tem a parte inteira
    l=0
    p2=""
    while (l<len(ListaResto)):
        p2=p2+str(ListaResto[l])
        l=l+1
   
    return p1+"."+p2
   
print (binario(21.75))

Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Imprimir/exportar
Ferramentas