Skip to content

Instantly share code, notes, and snippets.

@patonelli
Last active August 29, 2015 13:56
Show Gist options
  • Save patonelli/9140070 to your computer and use it in GitHub Desktop.
Save patonelli/9140070 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Representa\u00e7\u00e3o dos n\u00fameros no computador\n",
"=======\n",
"Neste aula estudaremos como s\u00e3o representados os n\u00fameros no computador e como isso interfere em sua aritm\u00e9tica.\n",
"\n",
"Base\n",
"----\n",
"Se fixamos um n\u00famero natural $\\beta > 1$, que se chamar\u00e1 *base* do sistema, podemos representar todo n\u00famero inteiro $k$ como\n",
":$$ k = a_n\\beta^n+ a_{n-1}\\beta^{n-1}+\\cdots + a_0$$\n",
"onde cada $a_i$ \u00e9 um n\u00famero entre $0$ e $\\beta -1$ e $a_n>0$.\n",
"Dizemos que esta \u00e9 a representa\u00e7\u00e3o de $k$ na base $\\beta$ e denotamos $k=[a_n...a_0]_{\\beta}$. Podemos pensar no n\u00famero $\\beta$ como o valor m\u00e1ximo de agrupamentos que conseguimos distinguir, e para contarmos, dividimos tudo em grupos de tamanho m\u00e1ximo $\\beta$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Representa\u00e7\u00e3o dos reais\n",
"-----\n",
"Se $x$ \u00e9 um n\u00famero real no intervalo $(0,1)$ podemos represent\u00e1-lo como\n",
":$$ x= \\sum_{k=1}^\\infty \\frac{b_k}{\\beta^k} $$\n",
"A sequ\u00eancia de $b_k$ pode ser infinita e n\u00e3o \u00e9 \u00fanica, denotaremos o n\u00famero como $x=[0.b_1b_2\\dots]_{\\beta}$\n",
"\n",
"A fun\u00e7\u00e3o descrita abaixo d\u00e1 a representa\u00e7\u00e3o bin\u00e1ria de um n\u00famero na representa\u00e7\u00e3o decimal."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def binario(a):\n",
" # da a representacao binaria do numero a \n",
" ParteInteira = int(a)\n",
" ParteDecimal = a-int(a)\n",
" # representacao binaria da parte inteira\n",
" # a lista seguinte guarda os d\u00edgitos da parte inteira\n",
" ListaDigitos=[]\n",
" while (ParteInteira > 0):\n",
" ListaDigitos.append(ParteInteira%2)\n",
" ParteInteira=ParteInteira//2\n",
" # lista dos digitos depois da virgula\n",
" ListaResto=[]\n",
" k=1\n",
" while ((ParteDecimal!=0)&(k<50)):\n",
" ListaResto.append(int(2*ParteDecimal))\n",
" ParteDecimal=2*ParteDecimal - int(2*ParteDecimal)\n",
" k=k+1\n",
" # produz a string de representacao:\n",
" \n",
" i=len(ListaDigitos)-1\n",
" p1=\"\"\n",
" while (i>=0):\n",
" p1=p1+str(ListaDigitos[i])\n",
" i=i-1\n",
" # Depois disso p1 tem a parte inteira\n",
" l=0\n",
" p2=\"\"\n",
" while (l<len(ListaResto)):\n",
" p2=p2+str(ListaResto[l])\n",
" l=l+1\n",
" \n",
" return p1+\".\"+p2\n",
" \n",
"\n",
"print (binario(21.75))\n"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"binario(0.1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"'.0001100110011001100110011001100110011001100110011'"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Representa\u00e7\u00e3o em Ponto Flutuante\n",
"----\n",
"\n",
"Consideramos uma base fixa $\\beta > 1$. Um n\u00famero real $\\alpha \\in \\mathbb{R}$ positivo pode ser escrito nesta base como:\n",
":$$\\alpha = [a_k\\cdots a_0.b_1b_2\\cdots]_{\\beta} $$\n",
"Isto significa que:\n",
":$$\\alpha = a_k\\beta^k + \\cdots + a_0 + \\frac{b_1}{\\beta} +\\frac{b_2}{\\beta^2} + \\cdots $$\n",
"Na equa\u00e7\u00e3o acima, colocando $\\beta^{k+1}$ em evid\u00eancia temos:\n",
":$$\\alpha = \\left( \\frac{a_k}{\\beta} + \\cdots + \\frac{a_0}{\\beta^{k+1}} + \\frac{b_1}{\\beta^{k+2}} +\\frac{b_2}{\\beta^{k+3}} + \\cdots\\right)\\times \\beta^{k+1} $$\n",
"ou ainda, lembrando da nota\u00e7\u00e3o de um n\u00famero numa base dada:\n",
":$$\\alpha = [0.a_k \\cdots a_0 b_1 b_2\\cdots]_{\\beta} \\times \\beta^{k+1} $$\n",
"Esta \u00faltima f\u00f3rmula \u00e9 importante. O n\u00famero real $ \\alpha$ fica caracterizado por tr\u00eas dados:\n",
"\n",
"* O n\u00famero $ m = [0.a_k \\cdots a_0 b_1 b_2\\cdots]_{\\beta} \\in [0.1,1)$ chamado de **mantissa**.\n",
"* O n\u00famero $e = k+1 $ chamado de **expoente**\n",
"* O sinal do n\u00famero $\\sigma$\n",
"\n",
"Esta representa\u00e7\u00e3o do n\u00famero $\\alpha$ como $\\sigma m \\times \\beta^e$ chamaremos de **representa\u00e7\u00e3o normal em ponto flutuante** na base $\\beta$.\n",
"Em geral a base fica clara pelo contexto!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"N\u00fameros de M\u00e1quina\n",
"----\n",
"Se fixamos uma base, $\\beta$, a quantidade de d\u00edgitos na mantissa, $\\mathbf{m}$ e limite para o expoente, $|e|\\leq M$, temos o subconjunto finito de $\\mathbb{R}$\n",
"\n",
" $$ \\mathbb{M}= \\{ 0.d_1\\dots d_{\\mathbf{m}} \\times \\beta^{e} \\text{ com } |e|\\leq M\\}$$ \n",
"\n",
"que \u00e9 chamado de conjunto de n\u00fameros de m\u00e1quina."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Arredondamento\n",
"----\n",
"Uma fun\u00e7\u00e3o\n",
"\n",
"$$ A: \\mathbb{R} \\to \\mathbb{M} $$\n",
"\n",
"\u00e9 uma ma fun\u00e7\u00e3o de arredondamento se preserva a ordem e restrita ao conjunto $\\mathbb{M}$ \u00e9 a identidade.\n",
"Dois s\u00e3o os arredondamentos mais t\u00edpicos. \n",
"\n",
"* $\\text{rd}(x)$ \u00e9 o n\u00famero de m\u00e1quina mais pr\u00f3ximo de $x$.\n",
"* $\\text{tr}(x)$ \u00e9 o n\u00famero de m\u00e1quina obtido pelo truncamento dos d\u00edgitos de ordem $m+1$ em diante, na representa\u00e7\u00e3o normal do n\u00famero x.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Erros absolutos e erros relativos\n",
"----\n",
"\n",
"Se $x$ e $y$ s\u00e3o dois n\u00fameros consecutivos de $\\mathbb{M}$ ent\u00e3o temos\n",
"\n",
"$ x = 0.d_1\\dots d_m \\times \\beta^e$ e $y = (0.d_1\\dots d_m + \\beta^{-m})\\times \\beta^e$ e a diferen\u00e7a d\u00e1:\n",
"\n",
"$|x-y| = \\beta^{e-m}$\n",
"\n",
"Se x \u00e9 um n\u00famero real qualquer ent\u00e2o\n",
"\n",
"$|x-\\text{rd}(x)| \\leq \\frac{\\beta^{e-m}}{2}$\n",
"\n",
"e o erro relativo\n",
"\n",
"$$ \\frac{|x-\\text{rd}(x)|}{|x|} \\leq \\frac{\\beta^{e-m}}{2|x|}$$\n",
"\n",
"e como sabemos que $\\beta^{e-1} \\leq x \\leq \\beta^{e}$ concluimos que\n",
"\n",
"$$ \\frac{|x-\\text{rd}(x)|}{|x|} \\leq \\frac{\\beta^{e-m}}{2\\beta^{e-1}}= \\frac{\\beta^{m+1}}{2}$$"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment