···22<html lang="es">
33 <head>
44 <meta charset="utf-8">
55- <title>La Guía del Punto Flotante - Rounding Errors</title>
55+ <title>La Guía del Punto Flotante - Errores de redondeo</title>
6677 <meta name="generator" content="nanoc 3.1.2">
8899- <meta name="Description" content="Explanation of the reasons for rounding errors in floating-point math, and of rounding modes.">
99+ <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">
10101111 <link rel="stylesheet" type="text/css" href="/style.css" media="screen">
1212 <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon">
···1414 </head>
1515 <body>
1616 <div id="main">
1717- <h1>Rounding Errors</h1>
1818- <p>Because <a href="/formats/fp/">floating-point numbers</a> have a limited number of digits, they cannot represent all
1919-<a href="http://en.wikipedia.org/wiki/Real_number">real numbers</a> accurately: when there
2020-are more digits than the format allows, the leftover ones are omitted - the number is
2121-<em>rounded</em>. There are three reasons why this can be necessary:</p>
1717+ <h1>Errores de redondeo</h1>
1818+ <p>Como los <a href="/formats/fp/">números de punto flotante</a> tienen un número de dígitos limitado,
1919+no pueden representar todos los <a href="http://es.wikipedia.org/wiki/N%C3%BAmero_real">números reales</a>
2020+de forma precisa: cuando hay más dígitos de los que permite el formato, los que sobran se
2121+omiten - el número se <em>redondea</em>. Hay tres razones por las que esto puede ser necesario:</p>
22222323<ul>
2424- <li><strong>Large Denominators</strong>
2525-In any base, the larger the denominator of an (irreducible) fraction, the more digits it needs in
2626-positional notation. A sufficiently large denominator will require rounding, no
2727-matter what the base or number of available digits is. For example, 1/1000
2828-cannot be accurately represented in less than 3 decimal digits, nor can any
2929-multiple of it (that does not allow simplifying the fraction).</li>
3030- <li><strong>Periodical digits</strong>
3131-Any (irreducible) fraction where the denominator has a prime factor that does not occur in the base
3232-requires an infinite number of digits that repeat periodically after a certain point.
3333-For example, in decimal 1/4, 3/5 and 8/20 are finite, because 2 and
3434-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
3535-and 7 are not factors of 10. Fractions with a prime factor of 5 in the denominator
3636-can be finite in base 10, but <a href="/formats/binary/">not in base 2</a> - the biggest source of confusion for most
3737-novice users of floating-point numbers.</li>
3838- <li><strong>Non-rational numbers</strong>
3939-Non-rational numbers cannot be represented as a regular fraction at all, and in
4040-positional notation (no matter what base) they require an infinite number of non-recurring digits.</li>
2424+ <li><strong>Denominadores grandes</strong>
2525+En cualquier base, cuanto mayor es el denominador de una fracción (irreducible),
2626+más dígitos se necesitan en notación posicional. Un denominador lo suficientemente
2727+grande necesitará redondeo, no importa qué base o número de dígitos disponible
2828+haya. Por ejemplo, 1/1000 no se puede representar de manera precisa en menos de
2929+3 dígitos decimales, ni ningún múltiplo suyo (que no permita simplificar la
3030+fracción).</li>
3131+ <li><strong>Dígitos periódicos</strong>
3232+Cualquier fracción (irreducible) donde el denominador tenga un factor primo que
3333+no esté en la base requiere un número infinito de dígitos que se repiten periódicamente
3434+a partir de un cierto punto. Por ejemplo, en decimal 1/4, 3/5 y 8/20 son finitos, porque
3535+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,
3636+porque 3 y 7 no son factores primos de 10. Las fracciones con un factor primo de 5 en el
3737+denominador pueden ser finitas en base 10, pero no en <a href="/formats/binary/">base 2</a> - la
3838+mayor fuente de confusión para los principiantes en los números de punto flotante.</li>
3939+ <li><strong>Números no racionales</strong>
4040+Los números irracionales no se pueden representar como una fracción regular, y en notación
4141+posicional (no importa en qué base) requieren un número infinito de dígitos no periódicos.</li>
4142</ul>
42434343-<h2 id="rounding-modes">Rounding modes</h2>
4444-<p>There are different methods to do rounding, and this can be very important in programming,
4545-because rounding can cause different problems in various contexts that can be addressed by
4646-using a better rounding mode. The most common rounding modes are:</p>
4444+<h2 id="mtodos-de-redondeo">Métodos de redondeo</h2>
4545+4646+<p>Hay varias formas diferentes de redondear, y esto puede ser muy importante en programación,
4747+porque el redondeo puede causar problemas en algunos contextos que se pueden solucionar
4848+utilizando un método de redondeo distinto. Los más usuales son:</p>
47494850<ul>
4949- <li><strong>Rounding towards zero</strong> - simply truncate the extra digits. The
5050-simplest method, but it introduces larger errors than necessary as well
5151-as a bias towards zero when dealing with mainly positive or mainly
5252-negative numbers.</li>
5353- <li><strong>Rounding half away from zero</strong> - if the truncated fraction is greater than or equal to half the base,
5454-increase the last remaining digit. This is the method generally taught in school and used by most
5555-people. It minimizes errors, but also introduces a bias (away from zero).</li>
5656- <li><strong>Rounding half to even</strong> also known as <strong>banker’s rounding</strong> - if the truncated fraction is
5757-greater than half the base,
5858-increase the last remaining digit. If it is equal to half the base, increase the digit only
5959-if that produces an even result. This minimizes errors and bias, and is therefore preferred for bookkeeping.</li>
5151+ <li><strong>Redondeo hacia el cero</strong> o <strong>truncamiento</strong> - simplemente se omiten los dígitos sobrantes. Es el
5252+método más sencillo, pero introduce más error del necesario y un sesgo hacia el
5353+cero cuando se manejan sobre todo números positivos o sobre todo negativos.</li>
5454+ <li><strong>Redondeo al alza</strong> - si la fracción truncada es mayor o igual que la mitad de la base,
5555+se incrementa el último dígito. Este método es el que se enseña en el colegio normalmente
5656+y es el que usa la mayoría de la gente. Minimiza el error, pero también introduce un sesgo
5757+(lejos del cero).</li>
5858+ <li><strong>Redondeo la mitad al par</strong> también conocido como el <strong>redondeo del banquero</strong> - si la
5959+fracción truncada es mayor que la mitad de la base, se incrementa el último dígito.
6060+Si es igual a la mitad de la base, se incrementa solamente si el resultado es par. Esto
6161+minimiza el error y el sesgo, y por eso se prefiere en contabilidad. Es el método por
6262+defecto en el estándar IEEE 754.</li>
6063</ul>
61646262-<p>Examples in base 10:</p>
6565+<p>Ejemplos en base 10:</p>
63666467<table>
6568 <thead>
6669 <tr>
6770 <th> </th>
6868- <th>Towards zero</th>
6969- <th>Half away from zero</th>
7070- <th>Half to even</th>
7171+ <th>Hacia el cero</th>
7272+ <th>Al alza</th>
7373+ <th>La mitad al par</th>
7174 </tr>
7275 </thead>
7376 <tbody>
···110113 </tbody>
111114</table>
112115113113-<p>More <a href="http://en.wikipedia.org/wiki/Rounding">rounding methods</a> can be found at Wikipedia.</p>
116116+<p>Se pueden encontrar más <a href="http://en.wikipedia.org/wiki/Rounding">métodos de redondeo (inglés)</a>
117117+en la Wikipedia inglesa.</p>
114118115119 <g:plusone href="http://puntoflotante.org/"></g:plusone>
116120 <div id="license">
···121125 </div>
122126 </div>
123127 <div id="sidebar">
124124- <img src="/logo.png">
128128+ <a href="/"><img src="/logo.png"></a>
125129 <h2>La Guía del Punto Flotante</h2>
126130 <ul>
127131 <li><a href="/">Inicio</a></li>
+40-30
formats/binary/index.html
···22<html lang="es">
33 <head>
44 <meta charset="utf-8">
55- <title>La Guía del Punto Flotante - Binary Fractions</title>
55+ <title>La Guía del Punto Flotante - Fracciones binarias</title>
6677 <meta name="generator" content="nanoc 3.1.2">
8899- <meta name="Description" content="In-depth explanation of how binary fractions work, what problems the cause and why they are used anyway">
99+ <meta name="Description" content="Explicación detallada de cómo funcionan las fracciones binarias, qué problemas causan y por qué aun así se utilizan">
10101111 <link rel="stylesheet" type="text/css" href="/style.css" media="screen">
1212 <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon">
···1414 </head>
1515 <body>
1616 <div id="main">
1717- <h1>Binary Fractions</h1>
1818- <h2 id="how-they-work">How they work</h2>
1919-<p>As a programmer, you should be familiar with the concept of binary integers, i.e.
2020-the representation of integer numbers as a series of bits:</p>
1717+ <h1>Fracciones binarias</h1>
1818+ <h2 id="cmo-funcionan">Cómo funcionan</h2>
1919+2020+<p>Como programador, deberías estar familiarizado con el conceptro de enteros binarios,
2121+esto es, la representación de números enteros como series de bits:</p>
21222223<table>
2323-<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>
2424+<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>
2425<tr class="base_example">
2526<td class="digit">1</td><td>⋅</td><td class="num_base">10<sup>1</sup></td><td>+</td>
2627<td class="digit">3</td><td>⋅</td><td class="num_base">10<sup>0</sup></td><td>=</td>
···4142<td class="digit">1</td><td>⋅</td><td>1</td>
4243</tr></table>
43444444-<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>
4545+<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
4646+posicional</a>, hacen lo mismo:</p>
45474648<table>
4747-<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>
4949+<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>
4850<tr class="base_example">
4951<td class="digit">6</td><td>⋅</td><td class="num_base">10<sup>-1</sup></td><td>+</td>
5052<td class="digit">2</td><td>⋅</td><td class="num_base">10<sup>-2</sup></td><td>+</td>
···6567<td class="digit">1</td><td>⋅</td><td>1/8</td>
6668</tr></table>
67696868-<h2 id="problems">Problems</h2>
6969-<p>While they work the same in principle, binary fractions are different from decimal fractions in what
7070-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>
7070+<h2 id="problemas">Problemas</h2>
71717272-<p>Specifically, binary can only represent those numbers as a finite fraction where the denominator
7373-is a power of 2. Unfortunately, this does not include most of the numbers that can be
7474-represented as finite fraction in base 10, like 0.1.</p>
7272+<p>Aunque funcionan igual en principio, las fracciones binarias son diferentes a las fracciones decimales
7373+en qué números que se pueden representar con precisión dado un número de dígitos, y por tanto también
7474+en qué números resultan en <a href="/errors/rounding/">errores de redondeo</a>: concretamente, en binario solo
7575+se pueden representar como una fracción finita aquellos números en los que el denominador es una
7676+potencia de 2. Por desgracia, esto no incluye la mayoría de los números que pueden ser representados
7777+como una fracción finita en base 10, como 0.1.</p>
75787679<table>
7780 <thead>
7881 <tr>
7979- <th>Fraction</th>
8282+ <th>Fracción</th>
8083 <th>Base</th>
8181- <th>Positional Notation</th>
8282- <th>Rounded to 4 digits</th>
8383- <th>Rounded value as fraction</th>
8484- <th>Rounding error</th>
8484+ <th>Notación posicional</th>
8585+ <th>Redondeado a 4 dígitos</th>
8686+ <th>Valor redondeado como fracción</th>
8787+ <th>Error de redondeo</th>
8588 </tr>
8689 </thead>
8790 <tbody>
···120123 </tbody>
121124</table>
122125123123-<p>And this is how you already get a rounding error when you just <em>write down</em> a number like 0.1 and
124124-run it through your interpreter or compiler. It’s not as big as 3/80 and may be invisible because
125125-computers cut off after 23 or 52 binary digits rather than 4. But the error is there and <em>will</em> cause
126126-problems eventually if you just ignore it.</p>
126126+<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
127127+pasarlo por tu intérprete o compilador. No es tan grande como 3/80 y puede ser invisible porque
128128+los ordenadores cortan después de 23 o 52 dígitos binarios en vez de 4. Pero el error está ahí
129129+y <em>causará</em> problemas eventualmente si simplemente lo ignoras.</p>
127130128128-<h2 id="why-use-binary">Why use Binary?</h2>
129129-<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>
131131+<h2 id="por-qu-usar-binario">¿Por qué usar binario?</h2>
132132+133133+<p>En el nivel más inferior, los ordenadores están basados en miles de millones de elementos eléctricos
134134+que tienen dos estados (normalmente baja y alta tensión). Interpretándolos como 0 y 1, es muy fácil
135135+construir circuitos para almacenar números binarios y hacer cálculos con ellos.</p>
130136131131-<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>
137137+<p>Mientras que es posible simular el comportamiento de los números decimales con circuitos binarios
138138+también, es menos eficiente. Si los ordenadores usaran números decimales internamente, tendrían
139139+menos memoria y serían más lentos con el mismo nivel de tecnología.</p>
132140133133-<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
134134-that some extra care and effort are necessary for applications that require <a href="/formats/exact/">decimal-like behaviour</a>.</p>
141141+<p>Puesto que la diferencia de comportamiento entre números binarios y decimales no es importante para
142142+la mayor parte de las aplicaciones, la elección lógica es construir ordenadores basados en el sistema
143143+binario y vivir con el hecho de que hay que poner un poco más de atención y esfuerzo para las aplicaciones
144144+que tienen que funcionar <a href="/formats/exact/">como un número decimal</a>.</p>
135145136146 <g:plusone href="http://puntoflotante.org/"></g:plusone>
137147 <div id="license">
···142152 </div>
143153 </div>
144154 <div id="sidebar">
145145- <img src="/logo.png">
155155+ <a href="/"><img src="/logo.png"></a>
146156 <h2>La Guía del Punto Flotante</h2>
147157 <ul>
148158 <li><a href="/">Inicio</a></li>
+47-24
formats/exact/index.html
···22<html lang="es">
33 <head>
44 <meta charset="utf-8">
55- <title>La Guía del Punto Flotante - Exact Types</title>
55+ <title>La Guía del Punto Flotante - Tipos exactos</title>
6677 <meta name="generator" content="nanoc 3.1.2">
8899- <meta name="Description" content="Description of various datatypes that can be more exact that floating-point numbers">
99+ <meta name="Description" content="Descripción de varios tipos de datos que pueden ser más exactos que los números de punto flotante">
10101111 <link rel="stylesheet" type="text/css" href="/style.css" media="screen">
1212 <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon">
···1414 </head>
1515 <body>
1616 <div id="main">
1717- <h1>Exact Types</h1>
1818- <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>
1717+ <h1>Tipos exactos</h1>
1818+ <p>Aunque los números de <a href="/formats/fp/">punto flotante</a> <a href="/formats/binary/">binarios</a>
1919+son mejores para que los ordenadores trabajen con ellos, y lo bastante buenos para
2020+los humanos, a veces simplemente no son apropiados. En ocasiones los números de
2121+verdad tienen que sumarse bien hasta el último bit, y no hay excusas técnicas
2222+aceptables - normalmente cuando los cálculos involucran dinero.</p>
19232020-<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).
2121-Each language or platform has its own solution, sometimes multiple different ones. For details, look at the language cheat sheets.</p>
2424+<p>Desgraciadamente, no hay un estándar dominante equivalente al IEEE 754 para esto
2525+(la versión del 2008 añadió tipos decimales, pero es demasiado reciente para
2626+tener una adopción generalizada).</p>
22272323-<p>There are at least three fundamentally different kinds of such types:</p>
2828+<p>Cada lenguaje o plataforma tiene su propia solución, y a veces más de una. Para
2929+más detalles, puedes ver las cheat sheets de los lenguajes.</p>
24302525-<h2 id="limited-precision-decimal">Limited-Precision Decimal</h2>
2626-<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>
3131+<p>Hay al menos tres clases diferentes de estos tipos de datos:</p>
3232+3333+<h2 id="decimal-de-precisin-limitada">Decimal de precisión limitada</h2>
3434+3535+<p>Básicamente lo mismo que el punto flotante binario del IEEE 754, excepto porque
3636+el exponente se interpreta en base 10. Como resultado, no hay <a href="/errors/rounding/">errores de
3737+redondeo</a> inesperados. Además, este tipo de formato es
3838+relativamente compacto y rápido, pero normalmente más lento que los formatos binarios.</p>
3939+4040+<h2 id="decimal-de-precisin-arbitraria">Decimal de precisión arbitraria</h2>
4141+4242+<p>A veces llamado «bignum», es similar a un tipo de precisión limitada, pero tiene
4343+la habilidad de incrementar la longitud de la mantisa (a veces también la del exponente)
4444+cuando es necesario. La contrapartida es que hay un coste (en memoria y velocidad)
4545+por soportar esta flexibilidad, y además cuanto más larga es la mantisa más memoria
4646+se necesita y más lentos se vuelven los cálculos.</p>
27472828-<h2 id="arbitrary-precision-decimal">Arbitrary-Precision Decimal</h2>
2929-<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
3030-memory is needed and the slower all calculations become.</p>
4848+<p>Puede ser muy tentador decir «mi operación es importante, así que necesito toda la
4949+precisión que sea posible», pero en la práctica la importancia real de la precisión
5050+en la diezmilésima cifra decimal se desvanece en comparación con la penalización en
5151+la eficiencia requerida para soportarlo.</p>
31523232-<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
3333-performance penalty required to support it.</p>
5353+<h2 id="clculo-simblico">Cálculo simbólico</h2>
34543535-<h2 id="symbolic-calculations">Symbolic calculations</h2>
3636-<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>
5555+<p>El «santo grial» de las operaciones exactas. Se consigue escribiendo un programa que
5656+realmente conozca todas las reglas matemáticas y represente los datos como <em>símbolos</em>
5757+en lugar de números redondeados e imprecisos. Por ejemplo:</p>
37583859<ul>
3939- <li>1/3 is actually a fraction “one divided by three”</li>
4040- <li>The square root of 2 is really the number that, multiplied by itself, is <em>exactly</em> 2</li>
4141- <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>
6060+ <li>1/3 es realmente la fracción «uno dividido entre tres».</li>
6161+ <li>La raíz cuadrada de 2 es realmente el número que, multiplicado por sí mismo, da <em>exactamente</em> 2.</li>
6262+ <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>
4263</ul>
43644444-<p>However, these symbolic math systems are complex, slow and require significant mathematical knowledge to use.
4545-They are invaluable tools for mathematicians, but not appropriate for most everyday programming tasks. And
4646-even many mathematicians work on problems where imprecise, numerical solutions are better because no
4747-symbolic solution is known.</p>
6565+<p>Sin embargo, estos sistemas de cálculo simbólico son complejos, lentos y requieren
6666+unos conocimientos matemáticos significativos para ser usados. Son herramientas
6767+inestimables para los matemáticos, pero no son apropiadas para las tareas diarias en
6868+programación. E incluso la mayoría de los matemáticas trabajan en problemas donde
6969+soluciones numéricas imprecisas son mejores porque no se conoce solución en forma
7070+cerrada.</p>
48714972 <g:plusone href="http://puntoflotante.org/"></g:plusone>
5073 <div id="license">
···5578 </div>
5679 </div>
5780 <div id="sidebar">
5858- <img src="/logo.png">
8181+ <a href="/"><img src="/logo.png"></a>
5982 <h2>La Guía del Punto Flotante</h2>
6083 <ul>
6184 <li><a href="/">Inicio</a></li>
+5-5
formats/fp/index.html
···22<html lang="es">
33 <head>
44 <meta charset="utf-8">
55- <title>La Guía del Punto Flotante - Números de Punto Flotante</title>
55+ <title>La Guía del Punto Flotante - Números de punto flotante</title>
6677 <meta name="generator" content="nanoc 3.1.2">
88···1414 </head>
1515 <body>
1616 <div id="main">
1717- <h1>Números de Punto Flotante</h1>
1717+ <h1>Números de punto flotante</h1>
1818 <h2 id="por-qu-son-necesarios-los-nmeros-de-punto-flotante">Por qué son necesarios los números de punto flotante</h2>
19192020<p>Como la memoria de los ordenadores es limitada, no puedes almacenar números
2121con precisión infinita, no importa si usas <a href="/formats/binary/">fracciones binarias</a> o
2222-decimales: en algún punto tienes que cortar. Pero ¿cuánta precisión se necesita?
2222+decimales: en algún momento tienes que cortar. Pero ¿cuánta precisión se necesita?
2323¿Y <em>dónde</em> se necesita? ¿Cuántos dígitos enteros y cuántos fraccionarios?</p>
24242525<ul>
···3333embargo, solo se necesita precisión <em>relativa</em>. Para satisfacer al físico, debe
3434ser posible hacer cálculos que involucren números de órdenes muy dispares.</p>
35353636-<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>
3636+<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>
37373838<h2 id="cmo-funcionan-los-nmeros-de-punto-flotante">Cómo funcionan los números de punto flotante</h2>
3939···151151 </div>
152152 </div>
153153 <div id="sidebar">
154154- <img src="/logo.png">
154154+ <a href="/"><img src="/logo.png"></a>
155155 <h2>La Guía del Punto Flotante</h2>
156156 <ul>
157157 <li><a href="/">Inicio</a></li>
+16-10
formats/integer/index.html
···22<html lang="es">
33 <head>
44 <meta charset="utf-8">
55- <title>La Guía del Punto Flotante - On Using Integers</title>
55+ <title>La Guía del Punto Flotante - Sobre usar enteros</title>
6677 <meta name="generator" content="nanoc 3.1.2">
8899- <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.">
99+ <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">
10101111 <link rel="stylesheet" type="text/css" href="/style.css" media="screen">
1212 <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon">
···1414 </head>
1515 <body>
1616 <div id="main">
1717- <h1>On Using Integers</h1>
1818- <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>
1717+ <h1>Sobre usar enteros</h1>
1818+ <p>Mientras que los tipos enteros son normalmente binarios y por definición no soportan
1919+fracciones, son exactos (no hay <a href="/errors/rounding/">errores de redondeo</a> cuando se
2020+convierten desde enteros decimales) y se pueden usar como una suerte de <a href="/formats/exact/">tipo
2121+decimal</a> «casero» eligiendo implícitamente un punto decimal fijo
2222+de tal forma que la unidad más pequeña con la que estés trabajando se pueda representar
2323+por el entero 1. En la práctica, esto normalmente se expresa como: <strong>«Para manejar
2424+dinero, almacena y calcula todo en céntimos y solo formatea el resultado»</strong>.</p>
19252020-<p>This works, but has a number of <strong>severe drawbacks</strong>:</p>
2626+<p>Esto funciona, pero tiene algunas <strong>desventajas importantes</strong>:</p>
21272228<ul>
2323- <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>
2424- <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>
2525- <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>
2929+ <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>
3030+ <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>
3131+ <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>
2632</ul>
27332828-<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>
3434+<p>Resumen: <strong>no se recomienda usar enteros</strong>. Haz esto solamente si no hay otra <a href="/formats/exact/">alternativa mejor</a>.</p>
29353036 <g:plusone href="http://puntoflotante.org/"></g:plusone>
3137 <div id="license">
···3642 </div>
3743 </div>
3844 <div id="sidebar">
3939- <img src="/logo.png">
4545+ <a href="/"><img src="/logo.png"></a>
4046 <h2>La Guía del Punto Flotante</h2>
4147 <ul>
4248 <li><a href="/">Inicio</a></li>
+6-6
index.html
···44 <meta charset="utf-8">
55 <title>La Guía del Punto Flotante - Lo que todo programador debería saber sobre aritmética de punto flotante</title>
6677- <meta name="google-site-verification" content="z_HIqTasE3WzbdPlabxF1mLMXO7pXofeGzF397vz20Q" />
77+ <meta name="google-site-verification" content="5yrVDy61XOxulQRv7qIErl1GX_Y9M4LmRWg47olpdIM" />
8899 <meta name="generator" content="nanoc 3.1.2">
1010···45454646<h3 id="sobre-la-notacin-y-la-nomenclatura">Sobre la notación y la nomenclatura</h3>
47474848-<p>Aunque tanto la punto como el punto como marcas decimales son válidas según el
4848+<p>Aunque tanto el punto como la coma son válidas como marcas decimales según el
4949Sistema Internacional y la norma ISO<sup>1</sup>, las Academias de la Lengua recomiendan el
5050-punto como separador para las cifras decimales<sup>2</sup>. Esto facilita las cosas,
5050+punto<sup>2</sup>. Esto facilita las cosas,
5151porque se converge así con la notación anglosajona que es la que se utiliza en la mayoría de
5252lenguajes de programación. En este sitio se ha optado por la denominación «punto
5353flotante» en lugar de «coma flotante», puesto que la Fundación del Español Urgente
···5555que debe haber correspondencia con el criterio adoptado para la marca decimal. </p>
56565757<ol>
5858- <li><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>
5959- <li><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>
5858+ <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>
5959+ <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>
6060</ol>
61616262 <g:plusone href="http://puntoflotante.org/"></g:plusone>
···6868 </div>
6969 </div>
7070 <div id="sidebar">
7171- <img src="/logo.png">
7171+ <a href="/"><img src="/logo.png"></a>
7272 <h2>La Guía del Punto Flotante</h2>
7373 <ul>
7474 <li><a href="/">Inicio</a></li>