Lo que todo programador debería saber sobre aritmética de punto flotante
1<!DOCTYPE HTML>
2<html lang="es">
3 <head>
4 <meta charset="utf-8">
5 <title>La Guía del Punto Flotante - Lo que todo programador debería saber sobre aritmética de punto flotante</title>
6
7 <meta name="google-site-verification" content="5yrVDy61XOxulQRv7qIErl1GX_Y9M4LmRWg47olpdIM" />
8
9 <meta name="generator" content="nanoc 3.1.2">
10
11 <meta name="Description" content="Pretende dar respuestas cortas y sencillas a las preguntas recurrentes de programadores principiantes sobre números de punto flotante que «no se suman correctamente», e información más detallada sobre cómo funcionan los números decimales del IEEE 754, cuándo y cómo usarlos correctamente, y qué usar en su lugar cuando no son apropiados">
12
13 <link rel="stylesheet" type="text/css" href="/style.css" media="screen">
14 <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon">
15 <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
16 </head>
17 <body>
18 <div id="main">
19 <h1>Lo que todo programador debería saber sobre aritmética de punto flotante</h1>
20 <h2 id="o">o</h2>
21
22<h1 id="por-qu-mis-nmeros-no-se-suman-bien">¿Por qué mis números no se suman bien?</h1>
23
24<p>O sea que has escrito algún código absurdamente simple, como por ejemplo:</p>
25
26<pre><code> 0.1 + 0.2
27</code></pre>
28
29<p>y has obtenido un resultado totalmente inesperado:</p>
30
31<pre><code> 0.30000000000000004
32</code></pre>
33
34<p>Tal vez pediste ayuda en algún foro y te mandaron a un <a href="http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html">artículo largo con un montón de fórmulas</a> que no parecía ser de ayuda.</p>
35
36<p>Bueno, este sitio está aquí para:</p>
37
38<ul>
39 <li>Explicar de manera concisa por qué obtuviste ese resultado inesperado</li>
40 <li>Decirte cómo lidiar con este problema</li>
41 <li>Si te interesa, dar explicaciones detalladas de por qué los números de punto flotante tienen que funcionar así y qué otros problemas pueden surgir</li>
42</ul>
43
44<p>Deberías ir a la sección de <a href="/basic/">Respuestas básicas</a> primero ─ ¡pero no termines ahí!</p>
45
46<h3 id="sobre-la-notacin-y-la-nomenclatura">Sobre la notación y la nomenclatura</h3>
47
48<p>Aunque tanto el punto como la coma son válidas como marcas decimales según el
49Sistema Internacional y la norma ISO<sup>1</sup>, las Academias de la Lengua recomiendan el
50punto<sup>2</sup>. Esto facilita las cosas,
51porque se converge así con la notación anglosajona que es la que se utiliza en la mayoría de
52lenguajes de programación. En este sitio se ha optado por la denominación «punto
53flotante» en lugar de «coma flotante», puesto que la Fundación del Español Urgente
54(<a href="http://www.fundeu.es/">Fundéu BBVA</a>) especificó en una consulta
55que debe haber correspondencia con el criterio adoptado para la marca decimal. </p>
56
57<ol>
58 <li>Bezos, Javier. <em>La marca decimal</em> <<a href="http://www.tex-tipografia.com/marca_decimal.html">http://www.tex-tipografia.com/marca_decimal.html</a>></li>
59 <li>Bezos, Javier. <em>Las notaciones científicas en la Ortografía académica</em> <<a href="http://www.tex-tipografia.com/ortografia_notaciones.html">http://www.tex-tipografia.com/ortografia_notaciones.html</a>></li>
60</ol>
61
62 <g:plusone href="http://puntoflotante.org/"></g:plusone>
63 <div id="license">
64 <p>© Publicado en <a href="http://puntoflotante.org/">http://puntoflotante.org/</a> bajo una licencia
65 <a href="http://creativecommons.org/licenses/by/3.0/deed.es">Creative Commons Atribución Unported (BY)</a>.
66 Original en inglés por Michael Borgwardt en
67 <a href="http://floating-point-gui.de/">http://floating-point-gui.de/</a>.</p>
68 </div>
69 </div>
70 <div id="sidebar">
71 <a href="/"><img src="/logo.png"></a>
72 <h2>La Guía del Punto Flotante</h2>
73 <ul>
74 <li><a href="http://floating-point-gui.de/" alt="in English"><img src="/en.png"></a></li>
75 <li><a href="/">Inicio</a></li>
76 <li><a href="/basic/">Respuestas básicas</a></li>
77 <li><a href="/references/">Referencias</a></li>
78 <li><a href="/xkcd/">xkcd</a></li>
79 </ul>
80
81 <h2>Formatos Numéricos</h2>
82 <ul>
83 <li><a href="/formats/binary/">Fracciones binarias</a></li>
84 <li><a href="/formats/fp/">Punto flotante</a></li>
85 <li><a href="/formats/exact/">Tipos exactos</a></li>
86 <li><a href="/formats/integer/">Sobre usar enteros</a></li>
87 </ul>
88
89 <h2>Errores</h2>
90 <ul>
91 <li><a href="/errors/rounding/">Redondeo</a></li>
92 <li><a href="/errors/comparison/">Comparación</a></li>
93 <li><a href="/errors/propagation/">Propagación</a></li>
94 </ul>
95
96 <h2>Cheat sheets</h2>
97 <ul>
98 <li><a href="/languages/csharp/">C#</a></li>
99 <li><a href="/languages/java/">Java</a></li>
100 <li><a href="/languages/javascript/">JavaScript</a></li>
101 <li><a href="/languages/perl/">Perl</a></li>
102 <li><a href="/languages/php/">PHP</a></li>
103 <li><a href="/languages/python/">Python</a></li>
104 <li><a href="/languages/sql/">SQL</a></li>
105 </ul>
106 </div>
107<a href="http://github.com/Pybonacci/puntoflotante.org"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png" alt="Fork me on GitHub" /></a>
108
109 </body>
110</html>