Lo que todo programador debería saber sobre aritmética de punto flotante
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Traducidos capítulos sobre error de redondeo y formatos

+175 -132
+1 -1
basic/index.html
··· 70 70 </div> 71 71 </div> 72 72 <div id="sidebar"> 73 - <img src="/logo.png"> 73 + <a href="/"><img src="/logo.png"></a> 74 74 <h2>La Guía del Punto Flotante</h2> 75 75 <ul> 76 76 <li><a href="/">Inicio</a></li>
+1 -1
errors/comparison/index.html
··· 93 93 </div> 94 94 </div> 95 95 <div id="sidebar"> 96 - <img src="/logo.png"> 96 + <a href="/"><img src="/logo.png"></a> 97 97 <h2>La Guía del Punto Flotante</h2> 98 98 <ul> 99 99 <li><a href="/">Inicio</a></li>
+1 -1
errors/propagation/index.html
··· 51 51 </div> 52 52 </div> 53 53 <div id="sidebar"> 54 - <img src="/logo.png"> 54 + <a href="/"><img src="/logo.png"></a> 55 55 <h2>La Guía del Punto Flotante</h2> 56 56 <ul> 57 57 <li><a href="/">Inicio</a></li>
+49 -45
errors/rounding/index.html
··· 2 2 <html lang="es"> 3 3 <head> 4 4 <meta charset="utf-8"> 5 - <title>La Guía del Punto Flotante - Rounding Errors</title> 5 + <title>La Guía del Punto Flotante - Errores de redondeo</title> 6 6 7 7 <meta name="generator" content="nanoc 3.1.2"> 8 8 9 - <meta name="Description" content="Explanation of the reasons for rounding errors in floating-point math, and of rounding modes."> 9 + <meta name="Description" content="Explicación de las razones de los errores de redondeo en aritmética de punto flotante, y de los métodos de redondeo"> 10 10 11 11 <link rel="stylesheet" type="text/css" href="/style.css" media="screen"> 12 12 <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon"> ··· 14 14 </head> 15 15 <body> 16 16 <div id="main"> 17 - <h1>Rounding Errors</h1> 18 - <p>Because <a href="/formats/fp/">floating-point numbers</a> have a limited number of digits, they cannot represent all 19 - <a href="http://en.wikipedia.org/wiki/Real_number">real numbers</a> accurately: when there 20 - are more digits than the format allows, the leftover ones are omitted - the number is 21 - <em>rounded</em>. There are three reasons why this can be necessary:</p> 17 + <h1>Errores de redondeo</h1> 18 + <p>Como los <a href="/formats/fp/">números de punto flotante</a> tienen un número de dígitos limitado, 19 + no pueden representar todos los <a href="http://es.wikipedia.org/wiki/N%C3%BAmero_real">números reales</a> 20 + de forma precisa: cuando hay más dígitos de los que permite el formato, los que sobran se 21 + omiten - el número se <em>redondea</em>. Hay tres razones por las que esto puede ser necesario:</p> 22 22 23 23 <ul> 24 - <li><strong>Large Denominators</strong> 25 - In any base, the larger the denominator of an (irreducible) fraction, the more digits it needs in 26 - positional notation. A sufficiently large denominator will require rounding, no 27 - matter what the base or number of available digits is. For example, 1/1000 28 - cannot be accurately represented in less than 3 decimal digits, nor can any 29 - multiple of it (that does not allow simplifying the fraction).</li> 30 - <li><strong>Periodical digits</strong> 31 - Any (irreducible) fraction where the denominator has a prime factor that does not occur in the base 32 - requires an infinite number of digits that repeat periodically after a certain point. 33 - For example, in decimal 1/4, 3/5 and 8/20 are finite, because 2 and 34 - 5 are the prime factors of 10. But 1/3 is not finite, nor is 2/3 or 1/7 or 5/6, because 3 35 - and 7 are not factors of 10. Fractions with a prime factor of 5 in the denominator 36 - can be finite in base 10, but <a href="/formats/binary/">not in base 2</a> - the biggest source of confusion for most 37 - novice users of floating-point numbers.</li> 38 - <li><strong>Non-rational numbers</strong> 39 - Non-rational numbers cannot be represented as a regular fraction at all, and in 40 - positional notation (no matter what base) they require an infinite number of non-recurring digits.</li> 24 + <li><strong>Denominadores grandes</strong> 25 + En cualquier base, cuanto mayor es el denominador de una fracción (irreducible), 26 + más dígitos se necesitan en notación posicional. Un denominador lo suficientemente 27 + grande necesitará redondeo, no importa qué base o número de dígitos disponible 28 + haya. Por ejemplo, 1/1000 no se puede representar de manera precisa en menos de 29 + 3 dígitos decimales, ni ningún múltiplo suyo (que no permita simplificar la 30 + fracción).</li> 31 + <li><strong>Dígitos periódicos</strong> 32 + Cualquier fracción (irreducible) donde el denominador tenga un factor primo que 33 + no esté en la base requiere un número infinito de dígitos que se repiten periódicamente 34 + a partir de un cierto punto. Por ejemplo, en decimal 1/4, 3/5 y 8/20 son finitos, porque 35 + 2 y 5 son los factores primos de 10. Pero 1/3 no es finito, ni tampoco 2/3 o 1/7 o 5/6, 36 + porque 3 y 7 no son factores primos de 10. Las fracciones con un factor primo de 5 en el 37 + denominador pueden ser finitas en base 10, pero no en <a href="/formats/binary/">base 2</a> - la 38 + mayor fuente de confusión para los principiantes en los números de punto flotante.</li> 39 + <li><strong>Números no racionales</strong> 40 + Los números irracionales no se pueden representar como una fracción regular, y en notación 41 + posicional (no importa en qué base) requieren un número infinito de dígitos no periódicos.</li> 41 42 </ul> 42 43 43 - <h2 id="rounding-modes">Rounding modes</h2> 44 - <p>There are different methods to do rounding, and this can be very important in programming, 45 - because rounding can cause different problems in various contexts that can be addressed by 46 - using a better rounding mode. The most common rounding modes are:</p> 44 + <h2 id="mtodos-de-redondeo">Métodos de redondeo</h2> 45 + 46 + <p>Hay varias formas diferentes de redondear, y esto puede ser muy importante en programación, 47 + porque el redondeo puede causar problemas en algunos contextos que se pueden solucionar 48 + utilizando un método de redondeo distinto. Los más usuales son:</p> 47 49 48 50 <ul> 49 - <li><strong>Rounding towards zero</strong> - simply truncate the extra digits. The 50 - simplest method, but it introduces larger errors than necessary as well 51 - as a bias towards zero when dealing with mainly positive or mainly 52 - negative numbers.</li> 53 - <li><strong>Rounding half away from zero</strong> - if the truncated fraction is greater than or equal to half the base, 54 - increase the last remaining digit. This is the method generally taught in school and used by most 55 - people. It minimizes errors, but also introduces a bias (away from zero).</li> 56 - <li><strong>Rounding half to even</strong> also known as <strong>banker’s rounding</strong> - if the truncated fraction is 57 - greater than half the base, 58 - increase the last remaining digit. If it is equal to half the base, increase the digit only 59 - if that produces an even result. This minimizes errors and bias, and is therefore preferred for bookkeeping.</li> 51 + <li><strong>Redondeo hacia el cero</strong> o <strong>truncamiento</strong> - simplemente se omiten los dígitos sobrantes. Es el 52 + método más sencillo, pero introduce más error del necesario y un sesgo hacia el 53 + cero cuando se manejan sobre todo números positivos o sobre todo negativos.</li> 54 + <li><strong>Redondeo al alza</strong> - si la fracción truncada es mayor o igual que la mitad de la base, 55 + se incrementa el último dígito. Este método es el que se enseña en el colegio normalmente 56 + y es el que usa la mayoría de la gente. Minimiza el error, pero también introduce un sesgo 57 + (lejos del cero).</li> 58 + <li><strong>Redondeo la mitad al par</strong> también conocido como el <strong>redondeo del banquero</strong> - si la 59 + fracción truncada es mayor que la mitad de la base, se incrementa el último dígito. 60 + Si es igual a la mitad de la base, se incrementa solamente si el resultado es par. Esto 61 + minimiza el error y el sesgo, y por eso se prefiere en contabilidad. Es el método por 62 + defecto en el estándar IEEE 754.</li> 60 63 </ul> 61 64 62 - <p>Examples in base 10:</p> 65 + <p>Ejemplos en base 10:</p> 63 66 64 67 <table> 65 68 <thead> 66 69 <tr> 67 70 <th> </th> 68 - <th>Towards zero</th> 69 - <th>Half away from zero</th> 70 - <th>Half to even</th> 71 + <th>Hacia el cero</th> 72 + <th>Al alza</th> 73 + <th>La mitad al par</th> 71 74 </tr> 72 75 </thead> 73 76 <tbody> ··· 110 113 </tbody> 111 114 </table> 112 115 113 - <p>More <a href="http://en.wikipedia.org/wiki/Rounding">rounding methods</a> can be found at Wikipedia.</p> 116 + <p>Se pueden encontrar más <a href="http://en.wikipedia.org/wiki/Rounding">métodos de redondeo (inglés)</a> 117 + en la Wikipedia inglesa.</p> 114 118 115 119 <g:plusone href="http://puntoflotante.org/"></g:plusone> 116 120 <div id="license"> ··· 121 125 </div> 122 126 </div> 123 127 <div id="sidebar"> 124 - <img src="/logo.png"> 128 + <a href="/"><img src="/logo.png"></a> 125 129 <h2>La Guía del Punto Flotante</h2> 126 130 <ul> 127 131 <li><a href="/">Inicio</a></li>
+40 -30
formats/binary/index.html
··· 2 2 <html lang="es"> 3 3 <head> 4 4 <meta charset="utf-8"> 5 - <title>La Guía del Punto Flotante - Binary Fractions</title> 5 + <title>La Guía del Punto Flotante - Fracciones binarias</title> 6 6 7 7 <meta name="generator" content="nanoc 3.1.2"> 8 8 9 - <meta name="Description" content="In-depth explanation of how binary fractions work, what problems the cause and why they are used anyway"> 9 + <meta name="Description" content="Explicación detallada de cómo funcionan las fracciones binarias, qué problemas causan y por qué aun así se utilizan"> 10 10 11 11 <link rel="stylesheet" type="text/css" href="/style.css" media="screen"> 12 12 <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon"> ··· 14 14 </head> 15 15 <body> 16 16 <div id="main"> 17 - <h1>Binary Fractions</h1> 18 - <h2 id="how-they-work">How they work</h2> 19 - <p>As a programmer, you should be familiar with the concept of binary integers, i.e. 20 - the representation of integer numbers as a series of bits:</p> 17 + <h1>Fracciones binarias</h1> 18 + <h2 id="cmo-funcionan">Cómo funcionan</h2> 19 + 20 + <p>Como programador, deberías estar familiarizado con el conceptro de enteros binarios, 21 + esto es, la representación de números enteros como series de bits:</p> 21 22 22 23 <table> 23 - <tr><th colspan="9">Decimal (<span class="num_base">base 10</span>)</th><th> </th><th colspan="17">Binary (<span class="num_base">base 2</span>)</th></tr> 24 + <tr><th colspan="9">Decimal (<span class="num_base">base 10</span>)</th><th> </th><th colspan="17">Binario (<span class="num_base">base 2</span>)</th></tr> 24 25 <tr class="base_example"> 25 26 <td class="digit">1</td><td>&sdot;</td><td class="num_base">10<sup>1</sup></td><td>+</td> 26 27 <td class="digit">3</td><td>&sdot;</td><td class="num_base">10<sup>0</sup></td><td>=</td> ··· 41 42 <td class="digit">1</td><td>&sdot;</td><td>1</td> 42 43 </tr></table> 43 44 44 - <p>This is how computers store integer numbers internally. And for fractional numbers in <a href="http://en.wikipedia.org/wiki/Positional_notation">positional notation</a>, they do the same thing:</p> 45 + <p>Así almacenan números internamente los ordenadores. Y para números racionales en <a href="http://es.wikipedia.org/wiki/Notaci%C3%B3n_posicional">notación 46 + posicional</a>, hacen lo mismo:</p> 45 47 46 48 <table> 47 - <tr><th colspan="13">Decimal (<span class="num_base">base 10</span>)</th><th> </th><th colspan="13">Binary (<span class="num_base">base 2</span>)</th></tr> 49 + <tr><th colspan="13">Decimal (<span class="num_base">base 10</span>)</th><th> </th><th colspan="13">Binario (<span class="num_base">base 2</span>)</th></tr> 48 50 <tr class="base_example"> 49 51 <td class="digit">6</td><td>&sdot;</td><td class="num_base">10<sup>-1</sup></td><td>+</td> 50 52 <td class="digit">2</td><td>&sdot;</td><td class="num_base">10<sup>-2</sup></td><td>+</td> ··· 65 67 <td class="digit">1</td><td>&sdot;</td><td>1/8</td> 66 68 </tr></table> 67 69 68 - <h2 id="problems">Problems</h2> 69 - <p>While they work the same in principle, binary fractions are different from decimal fractions in what 70 - numbers they can accurately represent with a given number of digits, and thus also in what numbers result in <a href="/errors/rounding/">rounding errors</a>:</p> 70 + <h2 id="problemas">Problemas</h2> 71 71 72 - <p>Specifically, binary can only represent those numbers as a finite fraction where the denominator 73 - is a power of 2. Unfortunately, this does not include most of the numbers that can be 74 - represented as finite fraction in base 10, like 0.1.</p> 72 + <p>Aunque funcionan igual en principio, las fracciones binarias son diferentes a las fracciones decimales 73 + en qué números que se pueden representar con precisión dado un número de dígitos, y por tanto también 74 + en qué números resultan en <a href="/errors/rounding/">errores de redondeo</a>: concretamente, en binario solo 75 + se pueden representar como una fracción finita aquellos números en los que el denominador es una 76 + potencia de 2. Por desgracia, esto no incluye la mayoría de los números que pueden ser representados 77 + como una fracción finita en base 10, como 0.1.</p> 75 78 76 79 <table> 77 80 <thead> 78 81 <tr> 79 - <th>Fraction</th> 82 + <th>Fracción</th> 80 83 <th>Base</th> 81 - <th>Positional Notation</th> 82 - <th>Rounded to 4 digits</th> 83 - <th>Rounded value as fraction</th> 84 - <th>Rounding error</th> 84 + <th>Notación posicional</th> 85 + <th>Redondeado a 4 dígitos</th> 86 + <th>Valor redondeado como fracción</th> 87 + <th>Error de redondeo</th> 85 88 </tr> 86 89 </thead> 87 90 <tbody> ··· 120 123 </tbody> 121 124 </table> 122 125 123 - <p>And this is how you already get a rounding error when you just <em>write down</em> a number like 0.1 and 124 - run it through your interpreter or compiler. It’s not as big as 3/80 and may be invisible because 125 - computers cut off after 23 or 52 binary digits rather than 4. But the error is there and <em>will</em> cause 126 - problems eventually if you just ignore it.</p> 126 + <p>Y así es como <em>ya</em> obtienes un error de redondeo <em>con solamente escribir</em> un número como 0.1 y 127 + pasarlo por tu intérprete o compilador. No es tan grande como 3/80 y puede ser invisible porque 128 + los ordenadores cortan después de 23 o 52 dígitos binarios en vez de 4. Pero el error está ahí 129 + y <em>causará</em> problemas eventualmente si simplemente lo ignoras.</p> 127 130 128 - <h2 id="why-use-binary">Why use Binary?</h2> 129 - <p>At the lowest level, computers are based on billions of electrical elements that have only two states, (usually low and high voltage). By interpreting these as 0 and 1, it’s very easy to build circuits for storing binary numbers and doing calculations with them.</p> 131 + <h2 id="por-qu-usar-binario">¿Por qué usar binario?</h2> 132 + 133 + <p>En el nivel más inferior, los ordenadores están basados en miles de millones de elementos eléctricos 134 + que tienen dos estados (normalmente baja y alta tensión). Interpretándolos como 0 y 1, es muy fácil 135 + construir circuitos para almacenar números binarios y hacer cálculos con ellos.</p> 130 136 131 - <p>While it’s possible to simulate the behaviour of decimal numbers with binary circuits as well, it’s less efficient. If computers used decimal numbers internally, they’d have less memory and be slower at the same level of technology. </p> 137 + <p>Mientras que es posible simular el comportamiento de los números decimales con circuitos binarios 138 + también, es menos eficiente. Si los ordenadores usaran números decimales internamente, tendrían 139 + menos memoria y serían más lentos con el mismo nivel de tecnología.</p> 132 140 133 - <p>Since the difference in behaviour between binary and decimal numbers is not important for most applications, the logical choice is to build computers based on binary numbers and live with the fact 134 - that some extra care and effort are necessary for applications that require <a href="/formats/exact/">decimal-like behaviour</a>.</p> 141 + <p>Puesto que la diferencia de comportamiento entre números binarios y decimales no es importante para 142 + la mayor parte de las aplicaciones, la elección lógica es construir ordenadores basados en el sistema 143 + binario y vivir con el hecho de que hay que poner un poco más de atención y esfuerzo para las aplicaciones 144 + que tienen que funcionar <a href="/formats/exact/">como un número decimal</a>.</p> 135 145 136 146 <g:plusone href="http://puntoflotante.org/"></g:plusone> 137 147 <div id="license"> ··· 142 152 </div> 143 153 </div> 144 154 <div id="sidebar"> 145 - <img src="/logo.png"> 155 + <a href="/"><img src="/logo.png"></a> 146 156 <h2>La Guía del Punto Flotante</h2> 147 157 <ul> 148 158 <li><a href="/">Inicio</a></li>
+47 -24
formats/exact/index.html
··· 2 2 <html lang="es"> 3 3 <head> 4 4 <meta charset="utf-8"> 5 - <title>La Guía del Punto Flotante - Exact Types</title> 5 + <title>La Guía del Punto Flotante - Tipos exactos</title> 6 6 7 7 <meta name="generator" content="nanoc 3.1.2"> 8 8 9 - <meta name="Description" content="Description of various datatypes that can be more exact that floating-point numbers"> 9 + <meta name="Description" content="Descripción de varios tipos de datos que pueden ser más exactos que los números de punto flotante"> 10 10 11 11 <link rel="stylesheet" type="text/css" href="/style.css" media="screen"> 12 12 <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon"> ··· 14 14 </head> 15 15 <body> 16 16 <div id="main"> 17 - <h1>Exact Types</h1> 18 - <p>While <a href="/formats/binary/">binary</a> <a href="/formats/fp/">floating-point</a> numbers are better for computers to work with, and usually good enough for humans, sometimes they are just not appropriate. Sometimes, the numbers really must add up to the last bit, and no technical excuses are acceptable - usually when the calculations involve money. </p> 17 + <h1>Tipos exactos</h1> 18 + <p>Aunque los números de <a href="/formats/fp/">punto flotante</a> <a href="/formats/binary/">binarios</a> 19 + son mejores para que los ordenadores trabajen con ellos, y lo bastante buenos para 20 + los humanos, a veces simplemente no son apropiados. En ocasiones los números de 21 + verdad tienen que sumarse bien hasta el último bit, y no hay excusas técnicas 22 + aceptables - normalmente cuando los cálculos involucran dinero.</p> 19 23 20 - <p>Unfortunately, there is no dominating standard like IEEE 754 for this (The 2008 version of the standard added decimal types, which is too recent to have seen widespread adoption). 21 - Each language or platform has its own solution, sometimes multiple different ones. For details, look at the language cheat sheets.</p> 24 + <p>Desgraciadamente, no hay un estándar dominante equivalente al IEEE 754 para esto 25 + (la versión del 2008 añadió tipos decimales, pero es demasiado reciente para 26 + tener una adopción generalizada).</p> 22 27 23 - <p>There are at least three fundamentally different kinds of such types:</p> 28 + <p>Cada lenguaje o plataforma tiene su propia solución, y a veces más de una. Para 29 + más detalles, puedes ver las cheat sheets de los lenguajes.</p> 24 30 25 - <h2 id="limited-precision-decimal">Limited-Precision Decimal</h2> 26 - <p>Basically the same as a IEEE 754 binary floating-point, except that the exponent is interpreted as base 10. As a result, there are no unexpected <a href="/errors/rounding/">rounding errors</a>. Also, this kind of format is relatively compact and fast, but usually slower than binary formats.</p> 31 + <p>Hay al menos tres clases diferentes de estos tipos de datos:</p> 32 + 33 + <h2 id="decimal-de-precisin-limitada">Decimal de precisión limitada</h2> 34 + 35 + <p>Básicamente lo mismo que el punto flotante binario del IEEE 754, excepto porque 36 + el exponente se interpreta en base 10. Como resultado, no hay <a href="/errors/rounding/">errores de 37 + redondeo</a> inesperados. Además, este tipo de formato es 38 + relativamente compacto y rápido, pero normalmente más lento que los formatos binarios.</p> 39 + 40 + <h2 id="decimal-de-precisin-arbitraria">Decimal de precisión arbitraria</h2> 41 + 42 + <p>A veces llamado «bignum», es similar a un tipo de precisión limitada, pero tiene 43 + la habilidad de incrementar la longitud de la mantisa (a veces también la del exponente) 44 + cuando es necesario. La contrapartida es que hay un coste (en memoria y velocidad) 45 + por soportar esta flexibilidad, y además cuanto más larga es la mantisa más memoria 46 + se necesita y más lentos se vuelven los cálculos.</p> 27 47 28 - <h2 id="arbitrary-precision-decimal">Arbitrary-Precision Decimal</h2> 29 - <p>Sometimes called “bignum”, this is similar to a limited-precision type, but has the ability to increase the length of the significand (possibly also the exponent) as required. The downside is that there is some basic overhead (memory and speed) to support this flexibility, and that the longer the significand gets, the more 30 - memory is needed and the slower all calculations become.</p> 48 + <p>Puede ser muy tentador decir «mi operación es importante, así que necesito toda la 49 + precisión que sea posible», pero en la práctica la importancia real de la precisión 50 + en la diezmilésima cifra decimal se desvanece en comparación con la penalización en 51 + la eficiencia requerida para soportarlo.</p> 31 52 32 - <p>It can be very tempting to say “My calculation is important, so I need as much precision as possible”, but in practice the actual importance of precision at the 10,000th decimal digit quickly pales in comparison with the 33 - performance penalty required to support it.</p> 53 + <h2 id="clculo-simblico">Cálculo simbólico</h2> 34 54 35 - <h2 id="symbolic-calculations">Symbolic calculations</h2> 36 - <p>The “holy grail” of exact calculations. Achieved by writing a program that actually knows all the rules of math and represents data as <em>symbols</em> rather than imprecise, rounded numbers. For example:</p> 55 + <p>El «santo grial» de las operaciones exactas. Se consigue escribiendo un programa que 56 + realmente conozca todas las reglas matemáticas y represente los datos como <em>símbolos</em> 57 + en lugar de números redondeados e imprecisos. Por ejemplo:</p> 37 58 38 59 <ul> 39 - <li>1/3 is actually a fraction “one divided by three”</li> 40 - <li>The square root of 2 is really the number that, multiplied by itself, is <em>exactly</em> 2</li> 41 - <li>Even <a href="http://en.wikipedia.org/wiki/Transcendental_numbers">transcendental numbers</a> like <strong>e</strong> and <strong>π</strong> are known, together with their properties, so that e<sup>iπ</sup> is <em>exactly</em> equal to -1.</li> 60 + <li>1/3 es realmente la fracción «uno dividido entre tres».</li> 61 + <li>La raíz cuadrada de 2 es realmente el número que, multiplicado por sí mismo, da <em>exactamente</em> 2.</li> 62 + <li>Incluso los <a href="http://es.wikipedia.org/wiki/N%C3%BAmero_trascendente">números trascendentes</a> como <strong>e</strong> y <strong>π</strong> son conocidos, junto con sus propiedades, de tal forma que e<sup>iπ</sup> es <em>exactamente</em> igual a -1.</li> 42 63 </ul> 43 64 44 - <p>However, these symbolic math systems are complex, slow and require significant mathematical knowledge to use. 45 - They are invaluable tools for mathematicians, but not appropriate for most everyday programming tasks. And 46 - even many mathematicians work on problems where imprecise, numerical solutions are better because no 47 - symbolic solution is known.</p> 65 + <p>Sin embargo, estos sistemas de cálculo simbólico son complejos, lentos y requieren 66 + unos conocimientos matemáticos significativos para ser usados. Son herramientas 67 + inestimables para los matemáticos, pero no son apropiadas para las tareas diarias en 68 + programación. E incluso la mayoría de los matemáticas trabajan en problemas donde 69 + soluciones numéricas imprecisas son mejores porque no se conoce solución en forma 70 + cerrada.</p> 48 71 49 72 <g:plusone href="http://puntoflotante.org/"></g:plusone> 50 73 <div id="license"> ··· 55 78 </div> 56 79 </div> 57 80 <div id="sidebar"> 58 - <img src="/logo.png"> 81 + <a href="/"><img src="/logo.png"></a> 59 82 <h2>La Guía del Punto Flotante</h2> 60 83 <ul> 61 84 <li><a href="/">Inicio</a></li>
+5 -5
formats/fp/index.html
··· 2 2 <html lang="es"> 3 3 <head> 4 4 <meta charset="utf-8"> 5 - <title>La Guía del Punto Flotante - Números de Punto Flotante</title> 5 + <title>La Guía del Punto Flotante - Números de punto flotante</title> 6 6 7 7 <meta name="generator" content="nanoc 3.1.2"> 8 8 ··· 14 14 </head> 15 15 <body> 16 16 <div id="main"> 17 - <h1>Números de Punto Flotante</h1> 17 + <h1>Números de punto flotante</h1> 18 18 <h2 id="por-qu-son-necesarios-los-nmeros-de-punto-flotante">Por qué son necesarios los números de punto flotante</h2> 19 19 20 20 <p>Como la memoria de los ordenadores es limitada, no puedes almacenar números 21 21 con precisión infinita, no importa si usas <a href="/formats/binary/">fracciones binarias</a> o 22 - decimales: en algún punto tienes que cortar. Pero ¿cuánta precisión se necesita? 22 + decimales: en algún momento tienes que cortar. Pero ¿cuánta precisión se necesita? 23 23 ¿Y <em>dónde</em> se necesita? ¿Cuántos dígitos enteros y cuántos fraccionarios?</p> 24 24 25 25 <ul> ··· 33 33 embargo, solo se necesita precisión <em>relativa</em>. Para satisfacer al físico, debe 34 34 ser posible hacer cálculos que involucren números de órdenes muy dispares.</p> 35 35 36 - <p>Básicamente, tener un número fijo de dígitos enteros y fraccionarios no es útil - y la solución es un formato con una <em>punto flotante</em>.</p> 36 + <p>Básicamente, tener un número fijo de dígitos enteros y fraccionarios no es útil - y la solución es un formato con un <em>punto flotante</em>.</p> 37 37 38 38 <h2 id="cmo-funcionan-los-nmeros-de-punto-flotante">Cómo funcionan los números de punto flotante</h2> 39 39 ··· 151 151 </div> 152 152 </div> 153 153 <div id="sidebar"> 154 - <img src="/logo.png"> 154 + <a href="/"><img src="/logo.png"></a> 155 155 <h2>La Guía del Punto Flotante</h2> 156 156 <ul> 157 157 <li><a href="/">Inicio</a></li>
+16 -10
formats/integer/index.html
··· 2 2 <html lang="es"> 3 3 <head> 4 4 <meta charset="utf-8"> 5 - <title>La Guía del Punto Flotante - On Using Integers</title> 5 + <title>La Guía del Punto Flotante - Sobre usar enteros</title> 6 6 7 7 <meta name="generator" content="nanoc 3.1.2"> 8 8 9 - <meta name="Description" content="Explanation why using integers to avoid floating-point problems by having them represent e.g. cents is not a good solution."> 9 + <meta name="Description" content="Explicación de por qué usar enteros para evitar los problemas del punto flotante para, por ejemplo, representar céntimos no es una buena solución"> 10 10 11 11 <link rel="stylesheet" type="text/css" href="/style.css" media="screen"> 12 12 <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon"> ··· 14 14 </head> 15 15 <body> 16 16 <div id="main"> 17 - <h1>On Using Integers</h1> 18 - <p>While integer types are usually binary and by definition do not support fractions, they are exact (no <a href="/errors/rounding/">rounding errors</a> when converting from decimal integers) and can be used as a sort of “poor man’s <a href="/formats/exact/">decimal type</a>” by choosing an implicit fixed decimal point so that the smallest unit you work with can be represented as the integer 1. In practical terms, this is often put as: <strong>“To handle money, store and calculate everything in cents and format only the output”</strong>.</p> 17 + <h1>Sobre usar enteros</h1> 18 + <p>Mientras que los tipos enteros son normalmente binarios y por definición no soportan 19 + fracciones, son exactos (no hay <a href="/errors/rounding/">errores de redondeo</a> cuando se 20 + convierten desde enteros decimales) y se pueden usar como una suerte de <a href="/formats/exact/">tipo 21 + decimal</a> «casero» eligiendo implícitamente un punto decimal fijo 22 + de tal forma que la unidad más pequeña con la que estés trabajando se pueda representar 23 + por el entero 1. En la práctica, esto normalmente se expresa como: <strong>«Para manejar 24 + dinero, almacena y calcula todo en céntimos y solo formatea el resultado»</strong>.</p> 19 25 20 - <p>This works, but has a number of <strong>severe drawbacks</strong>:</p> 26 + <p>Esto funciona, pero tiene algunas <strong>desventajas importantes</strong>:</p> 21 27 22 28 <ul> 23 - <li>It’s more work (and more opportunity for bugs) to get it right, especially in regard to <a href="/errors/rounding/">rounding modes</a>.</li> 24 - <li>Integers have complete precision, but very limited range, and when they overflow, they usually “wrap around” silently, i.e. the largest integer plus 1 becomes zero (for unsigned ints) or the negative value with the largest magnitude (for signed). This is just about the worst possible behaviour when dealing with money, for obvious reasons.</li> 25 - <li>The implicit decimal point is hard to change and extremely inflexible: if you store dollars as cents, it’s simply impossible to support the <a href="http://en.wikipedia.org/wiki/Bahraini_dinar">Bahraini dinar</a>(1 dinar = 1,000 Fils) at the same time. You’d have to store the position of the decimal point with the data - the first step in implementing your own (buggy, non-standard) limited-precision decimal <a href="/formats/fp/">floating-point</a> format.</li> 29 + <li>Supone más trabajo (y más oportunidades de introducir bugs) hacerlo bien, especialmente en lo que concierne a los <a href="/errors/rounding/">métodos de redondeo</a>.</li> 30 + <li>Los enteros tienen precisión completa, pero en un rango muy limitado, y cuando se desbordan, normalmente «dan la vuelta» silenciosamente: el mayor entero más 1 da cero (para enteros sin signo) o el valor negativo más grande en valor absoluto (para enteros con signo). Este es el peor comportamiento posible cuando se trabaja con dinero por razones obvias.</li> 31 + <li>El punto decimal implícito es defícil de cambiar y enormemente inflexible: si almacenas los dólares como céntimos, es simplemente imposible soportar el <a href="http://es.wikipedia.org/wiki/Dinar_barein%C3%AD">dinar bareiní</a>(1 dinar = 1000 fils) al mismo tiempo. Tendrías que almacenar la posición del punto decimal con los datos - el primer paso para implementar tu propio formato de <a href="/formats/fp/">punto flotante</a> decimal de precisión limitada (lleno de fallos y no estándar).</li> 26 32 </ul> 27 33 28 - <p>Summary: <strong>using integers is not recommended.</strong> Do this only if there really is no <a href="/formats/exact/">better alternative</a> at all.</p> 34 + <p>Resumen: <strong>no se recomienda usar enteros</strong>. Haz esto solamente si no hay otra <a href="/formats/exact/">alternativa mejor</a>.</p> 29 35 30 36 <g:plusone href="http://puntoflotante.org/"></g:plusone> 31 37 <div id="license"> ··· 36 42 </div> 37 43 </div> 38 44 <div id="sidebar"> 39 - <img src="/logo.png"> 45 + <a href="/"><img src="/logo.png"></a> 40 46 <h2>La Guía del Punto Flotante</h2> 41 47 <ul> 42 48 <li><a href="/">Inicio</a></li>
+6 -6
index.html
··· 4 4 <meta charset="utf-8"> 5 5 <title>La Guía del Punto Flotante - Lo que todo programador debería saber sobre aritmética de punto flotante</title> 6 6 7 - <meta name="google-site-verification" content="z_HIqTasE3WzbdPlabxF1mLMXO7pXofeGzF397vz20Q" /> 7 + <meta name="google-site-verification" content="5yrVDy61XOxulQRv7qIErl1GX_Y9M4LmRWg47olpdIM" /> 8 8 9 9 <meta name="generator" content="nanoc 3.1.2"> 10 10 ··· 45 45 46 46 <h3 id="sobre-la-notacin-y-la-nomenclatura">Sobre la notación y la nomenclatura</h3> 47 47 48 - <p>Aunque tanto la punto como el punto como marcas decimales son válidas según el 48 + <p>Aunque tanto el punto como la coma son válidas como marcas decimales según el 49 49 Sistema Internacional y la norma ISO<sup>1</sup>, las Academias de la Lengua recomiendan el 50 - punto como separador para las cifras decimales<sup>2</sup>. Esto facilita las cosas, 50 + punto<sup>2</sup>. Esto facilita las cosas, 51 51 porque se converge así con la notación anglosajona que es la que se utiliza en la mayoría de 52 52 lenguajes de programación. En este sitio se ha optado por la denominación «punto 53 53 flotante» en lugar de «coma flotante», puesto que la Fundación del Español Urgente ··· 55 55 que debe haber correspondencia con el criterio adoptado para la marca decimal. </p> 56 56 57 57 <ol> 58 - <li><em>La marca decimal</em> &lt;<a href="http://www.tex-tipografia.com/marca_decimal.html">http://www.tex-tipografia.com/marca_decimal.html</a>&gt;</li> 59 - <li><em>Las notaciones científicas en la Ortografía académica</em> &lt;<a href="http://www.tex-tipografia.com/ortografia_notaciones.html">http://www.tex-tipografia.com/ortografia_notaciones.html</a>&gt;</li> 58 + <li>Bezos, Javier. <em>La marca decimal</em> &lt;<a href="http://www.tex-tipografia.com/marca_decimal.html">http://www.tex-tipografia.com/marca_decimal.html</a>&gt;</li> 59 + <li>Bezos, Javier. <em>Las notaciones científicas en la Ortografía académica</em> &lt;<a href="http://www.tex-tipografia.com/ortografia_notaciones.html">http://www.tex-tipografia.com/ortografia_notaciones.html</a>&gt;</li> 60 60 </ol> 61 61 62 62 <g:plusone href="http://puntoflotante.org/"></g:plusone> ··· 68 68 </div> 69 69 </div> 70 70 <div id="sidebar"> 71 - <img src="/logo.png"> 71 + <a href="/"><img src="/logo.png"></a> 72 72 <h2>La Guía del Punto Flotante</h2> 73 73 <ul> 74 74 <li><a href="/">Inicio</a></li>
+1 -1
languages/csharp/index.html
··· 56 56 </div> 57 57 </div> 58 58 <div id="sidebar"> 59 - <img src="/logo.png"> 59 + <a href="/"><img src="/logo.png"></a> 60 60 <h2>La Guía del Punto Flotante</h2> 61 61 <ul> 62 62 <li><a href="/">Inicio</a></li>
+1 -1
languages/java/index.html
··· 82 82 </div> 83 83 </div> 84 84 <div id="sidebar"> 85 - <img src="/logo.png"> 85 + <a href="/"><img src="/logo.png"></a> 86 86 <h2>La Guía del Punto Flotante</h2> 87 87 <ul> 88 88 <li><a href="/">Inicio</a></li>
+1 -1
languages/javascript/index.html
··· 64 64 </div> 65 65 </div> 66 66 <div id="sidebar"> 67 - <img src="/logo.png"> 67 + <a href="/"><img src="/logo.png"></a> 68 68 <h2>La Guía del Punto Flotante</h2> 69 69 <ul> 70 70 <li><a href="/">Inicio</a></li>
+1 -1
languages/perl/index.html
··· 83 83 </div> 84 84 </div> 85 85 <div id="sidebar"> 86 - <img src="/logo.png"> 86 + <a href="/"><img src="/logo.png"></a> 87 87 <h2>La Guía del Punto Flotante</h2> 88 88 <ul> 89 89 <li><a href="/">Inicio</a></li>
+1 -1
languages/php/index.html
··· 56 56 </div> 57 57 </div> 58 58 <div id="sidebar"> 59 - <img src="/logo.png"> 59 + <a href="/"><img src="/logo.png"></a> 60 60 <h2>La Guía del Punto Flotante</h2> 61 61 <ul> 62 62 <li><a href="/">Inicio</a></li>
+1 -1
languages/python/index.html
··· 68 68 </div> 69 69 </div> 70 70 <div id="sidebar"> 71 - <img src="/logo.png"> 71 + <a href="/"><img src="/logo.png"></a> 72 72 <h2>La Guía del Punto Flotante</h2> 73 73 <ul> 74 74 <li><a href="/">Inicio</a></li>
+1 -1
languages/sql/index.html
··· 60 60 </div> 61 61 </div> 62 62 <div id="sidebar"> 63 - <img src="/logo.png"> 63 + <a href="/"><img src="/logo.png"></a> 64 64 <h2>La Guía del Punto Flotante</h2> 65 65 <ul> 66 66 <li><a href="/">Inicio</a></li>
+1 -1
references/index.html
··· 35 35 </div> 36 36 </div> 37 37 <div id="sidebar"> 38 - <img src="/logo.png"> 38 + <a href="/"><img src="/logo.png"></a> 39 39 <h2>La Guía del Punto Flotante</h2> 40 40 <ul> 41 41 <li><a href="/">Inicio</a></li>
+1 -1
xkcd/index.html
··· 32 32 </div> 33 33 </div> 34 34 <div id="sidebar"> 35 - <img src="/logo.png"> 35 + <a href="/"><img src="/logo.png"></a> 36 36 <h2>La Guía del Punto Flotante</h2> 37 37 <ul> 38 38 <li><a href="/">Inicio</a></li>