Mudanças entre as edições de "Map0151"
(→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
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=±[as…a0]β 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 (k−a0)//β 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 -*- """ |