Last active
August 29, 2015 13:56
-
-
Save patonelli/9140070 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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