{"id":104,"date":"2013-07-08T10:48:42","date_gmt":"2013-07-08T10:48:42","guid":{"rendered":"https:\/\/blogs.ua.es\/jpm33\/?p=104"},"modified":"2018-10-08T14:33:18","modified_gmt":"2018-10-08T14:33:18","slug":"estandar-ieee-754-para-la-representacion-en-coma-flotante","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/jpm33\/2013\/07\/08\/estandar-ieee-754-para-la-representacion-en-coma-flotante\/","title":{"rendered":"Est\u00e1ndar IEEE 754 para la representaci\u00f3n en coma flotante"},"content":{"rendered":"<h1>Introducci\u00f3n<\/h1>\n<p>La aritm\u00e9tica en coma flotante ha sido objeto de pol\u00e9micas y m\u00faltiples formas de implementarla (quiz\u00e1s m\u00e1s adelante escriba una entrada sobre los m\u00e9todos m\u00e1s extendidos) pero fue en 1985 cuando el IEEE [1] termin\u00f3 y public\u00f3 un documento donde estandarizaba la forma de representar los n\u00fameros en punto flotante y c\u00f3mo realizar las operaciones aritm\u00e9ticas. <strong>Esta norma se conoce como IEEE 754<\/strong>, y ha sido un fuerte dolor de cabeza para m\u00e1s de un estudiante de Inform\u00e1tica en su primer a\u00f1o.<\/p>\n<p>A d\u00eda de hoy se considera el est\u00e1ndar de facto en todos los ordenadores personales. Pero, \u00bfc\u00f3mo funciona exactamente?<\/p>\n<h1>Representaci\u00f3n<\/h1>\n<p>Simplificando a dos modalidades la norma define dos resoluciones posibles para los n\u00fameros. V\u00e9ase la figura 1. Simple precisi\u00f3n (32 bits) y doble precisi\u00f3n (64 bits).<\/p>\n<div style=\"width: 589px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.ua.es\/jpm33\/files\/2013\/06\/ieee754_floating_point.gif\" alt=\"Formato de representaci\u00f3n para el est\u00e1ndar IEEE 754 (en simple y doble precisi\u00f3n). Imagen gracias a IBM.\" width=\"579\" height=\"177\" \/><p class=\"wp-caption-text\">Figura 1: Formato de representaci\u00f3n para el est\u00e1ndar IEEE 754 (en simple y doble precisi\u00f3n). Imagen gracias a IBM.<\/p><\/div>\n<p>Matem\u00e1ticamente, \u00bfc\u00f3mo funciona este sistema de representaci\u00f3n? Dado un n\u00famero real &#8220;x&#8221; ser\u00e1 representado como su signo, multiplicado por el valor de su mantisa (n\u00famero normalizado tipo notaci\u00f3n cient\u00edfica) y multiplicado adem\u00e1s por la base de representaci\u00f3n \u00a0elavada al valor del exponente sesgado.<\/p>\n<p>(1)<img decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/chart.googleapis.com\/chart?cht=tx&amp;chl=sign(x)\\cdot%20mantissa%20\\cdot%202%20^{exp}&quot;\" alt=\"\" \/><br \/>\n(2)<img decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/chart.googleapis.com\/chart?cht=tx&amp;chl=exp_S=2^{n-1}-1\" alt=\"\" \/><\/p>\n<p>Hablando en t\u00e9rminos de representaci\u00f3n num\u00e9rica en computadores y tomando como ejemplo el caso de simple precisi\u00f3n donde se reserva un bit para el signo, 8 bits para el exponente y 23 bits para la matisa tenemos:<\/p>\n<ul>\n<li>Bit de signo: 0 positivo \/ 1 negativo<\/li>\n<li>El exponente se representa sesgado al valor dado por la formula (2). En el caso de simple presici\u00f3n ser\u00eda: exps = 2^(8-1)-1=2^7-1=127.<\/li>\n<li>La mantisa en binario es un n\u00famero del tipo 1.xxxxx donde el primer 1 no fraccionario se asume y no se representa dentro del formato.<\/li>\n<\/ul>\n<div>M\u00e1s adelante realizaremos alg\u00fan ejemplo pr\u00e1ctico, veremos n\u00fameros especiales como NaN , Infinito o el cero. De momento dejo unas curiosidades.<\/div>\n<div><\/div>\n<h1>Curiosidades<\/h1>\n<p>N\u00famero m\u00e1s grande representable:<br \/>\n<img decoding=\"async\" src=\"http:\/\/chart.googleapis.com\/chart?cht=tx&amp;chl=(2- 2^{23})\\cdot2^{127}=2^{128}-2^{104}\" alt=\"\" \/><\/p>\n<p>N\u00famero m\u00e1s peque\u00f1o representable (positivo y no cero):<br \/>\n<img decoding=\"async\" src=\"http:\/\/chart.googleapis.com\/chart?cht=tx&amp;chl=1\\cdot%202^{-126}\" alt=\"\" \/><\/p>\n<p>Tendiendo a cero hay una serie de n\u00fameros reales no representables:<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/chart.googleapis.com\/chart?cht=tx&amp;chl=[2^{-126},0)\\cup(0,-2^{-126]}]\\notin\\mathbb{R}\" alt=\"\" \/><\/p>\n<h1>Referencias<\/h1>\n<ol>\n<li>Instituto de Ingenieros El\u00e9ctricos y Electr\u00f3nicos (IEEE o IE<sup>3<\/sup>):\u00a0<a href=\"http:\/\/www.ieee.org\/index.html\">http:\/\/www.ieee.org\/index.html<\/a><\/li>\n<li>Grupo del IEEE sobre la norma 754:\u00a0<a href=\"http:\/\/grouper.ieee.org\/groups\/754\/\">http:\/\/grouper.ieee.org\/groups\/754\/<\/a><\/li>\n<li>Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic:\u00a0<a title=\"http:\/\/www.eecs.berkeley.edu\/~wkahan\/ieee754status\/IEEE754.PDF\" href=\"http:\/\/www.eecs.berkeley.edu\/~wkahan\/ieee754status\/IEEE754.PDF\" target=\"_blank\" rel=\"noopener\">http:\/\/www.eecs.berkeley.edu\/~wkahan\/ieee754status\/IEEE754.PDF<\/a><\/li>\n<li>Conversor entre decimal &lt;&#8211;&gt; IEEE754: <a title=\"http:\/\/www.h-schmidt.net\/FloatConverter\/\" href=\"http:\/\/www.h-schmidt.net\/FloatConverter\/\" target=\"_blank\" rel=\"noopener\">http:\/\/www.h-schmidt.net\/FloatConverter\/<\/a><\/li>\n<li>Conversor entre decimal &lt;&#8211;&gt; IEEE754:\u00a0<a title=\"http:\/\/users.minet.uni-jena.de\/~sack\/SS04\/download\/IEEE-754.html\" href=\"http:\/\/users.minet.uni-jena.de\/~sack\/SS04\/download\/IEEE-754.html\" target=\"_blank\" rel=\"noopener\">http:\/\/users.minet.uni-jena.de\/~sack\/SS04\/download\/IEEE-754.html<\/a><\/li>\n<li><a href=\"http:\/\/es.wikipedia.org\/wiki\/Intel_8087\">http:\/\/es.wikipedia.org\/wiki\/Intel_8087<\/a><\/li>\n<li>An Interview with the Old Man of Floating-Point;\u00a0<a href=\"http:\/\/www.cs.berkeley.edu\/~wkahan\/ieee754status\/754story.html\">http:\/\/www.cs.berkeley.edu\/~wkahan\/ieee754status\/754story.html<\/a><\/li>\n<li>Transparencias muy ilustrativas:\u00a0<a href=\"http:\/\/webdelprofesor.ula.ve\/ingenieria\/gilberto\/paralela\/09_AritmeticaPuntoFlotante.pdf\">http:\/\/webdelprofesor.ula.ve\/ingenieria\/gilberto\/paralela\/09_AritmeticaPuntoFlotante.pdf<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n La aritm\u00e9tica en coma flotante ha sido objeto de pol\u00e9micas y m\u00faltiples formas de implementarla (quiz\u00e1s m\u00e1s adelante escriba una entrada sobre los m\u00e9todos m\u00e1s extendidos) pero fue en 1985 cuando el IEEE [1] termin\u00f3 y public\u00f3 un documento &hellip; <a href=\"https:\/\/blogs.ua.es\/jpm33\/2013\/07\/08\/estandar-ieee-754-para-la-representacion-en-coma-flotante\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3080,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[236722,1596,236709],"tags":[236723,236730,154],"class_list":["post-104","post","type-post","status-publish","format-standard","hentry","category-arquitectura-de-computadores","category-ciencias","category-embedded","tag-arquitectura-de-computadores-2","tag-ciencias","tag-ingenieria"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/users\/3080"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/comments?post=104"}],"version-history":[{"count":13,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/104\/revisions"}],"predecessor-version":[{"id":422,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/104\/revisions\/422"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/media?parent=104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/categories?post=104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/tags?post=104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}