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.

Traducidas secciones básicas

+51 -45
+34 -30
content/basic.html
··· 1 1 --- 2 - title: Basic Answers 3 - description: Concise answers to common basic questions about floating-point math, like "Why don't my numbers add up?" 2 + title: Respuestas Básicas 3 + description: Respuestas concisas a preguntas básicas sobre aritmética de coma flotante, como «¿Por qué mis números no se suman bien?» 4 4 --- 5 5 6 - ### Why don't my numbers, like 0.1 + 0.2 add up to a nice round 0.3, and instead I get a weird result like 0.30000000000000004? 6 + ### ¿Por qué al sumar mis números, como 0.1 + 0.2, en vez de dar 0.3 dan un resultado extraño como 0.30000000000000004? 7 7 8 - Because internally, computers use a format ([binary](/formats/binary/) [floating-point](/formats/fp/)) that 9 - cannot accurately represent a number like 0.1, 0.2 or 0.3 *at all*. 8 + Porque internamente, los ordenadores usan un formato ([coma flotante](/formats/fp) [binario](/formats/binary)) 9 + que no puede representar de forma precisa números como 0.1, 0.2 o 0.3 *de ninguna manera*. 10 10 11 - When the code is compiled or interpreted, your "0.1" is already 12 - rounded to the nearest number in that format, which results 13 - in a small [rounding error](/errors/rounding/) even before the calculation happens. 11 + Cuando el código es compilado o interpretado, tu "0.1" se redondea 12 + al número más cercano en ese formato, lo que resulta en un pequeño 13 + [error de redondeo](/errors/rounding/) incluso antes de que se haga 14 + la operación. 14 15 15 - ### Why do computers use such a stupid system? 16 + ### ¿Por qué los ordenadores usan un sistema tan estúpido? 16 17 17 - It's not stupid, just different. Decimal numbers cannot accurately 18 - represent a number like 1/3, so you have to round to something like 19 - 0.33 - and you don't expect 0.33 + 0.33 + 0.33 to add up to 1, either - do you? 18 + No es estúpido, solo diferente. Los números decimales no pueden representar 19 + con precisión un número como ⅓, así que lo tienes que redondear a algo como 20 + 0.33 - y no esperas que 0.33 + 0.33 + 0.33 sea igual a 1 tampoco, ¿no? 20 21 21 - Computers use [binary numbers](/formats/binary/) because they're faster at dealing with 22 - those, and because for most calculations, a tiny error in the 17th 23 - decimal place doesn't matter at all since the numbers you work with 24 - aren't round (or that precise) anyway. 22 + Los ordenadores usan [números binarios](/formats/binary/) porque son más 23 + rápidos de manejar, y porque para la mayoría de operaciones un error en la 24 + 17ª cifra decimal no importa en absoluto ya que los valores con los que 25 + trabajas no eran así de precisos de todas formas. 25 26 26 - ### What can I do to avoid this problem? 27 + ### ¿Qué puedo hacer para evitar este problema? 27 28 28 - That depends on what kind of calculations you're doing. 29 + Eso depende del tipo de cálculos que estés haciendo. 29 30 30 - * If you really need your results to add up exactly, especially when you work with money: use a special [decimal datatype](/formats/exact/). 31 - * If you just don't want to see all those extra decimal places: simply format your result rounded to a fixed number of decimal places when displaying it. 32 - * If you have no decimal datatype available, an alternative is to work with [integers](/formats/integer/), e.g. do money calculations entirely in cents. But this is more work and has some drawbacks. 31 + * Si de verdad necesitas que tus resultados se sumen con exactitud, especialmente cuando trabajas con dinero: utiliza un [tipo de datos decimal](/formats/exact/) especial. 32 + * Si es solo que no quieres ver todos esos decimales extra: simplemente da formato a tu resultado redondeando a un número fijo de cifras decimales cuando lo presentes. 33 + * Si no tienes un tipo de datos decimal, una alternativa es trabajar con [enteros](/formats/integer/), e.g. hacer todos los cálculos con dinero en céntimos. Pero esto requiere más trabajo y tiene algunas desventajas. 33 34 34 - ### Why do other calculations like 0.1 + 0.4 work correctly? 35 + ### ¿Por qué otros cálculos como 0.1 + 0.4 sí funcionan bien? 35 36 36 - In that case, the result (0.5) *can* be represented exactly as a floating-point number, 37 - and it's possible for rounding errors in the input numbers to cancel each other out - 38 - But that can't necessarily be relied upon (e.g. when those two numbers 39 - were stored in differently sized floating point representations first, the rounding 40 - errors might not offset each other). 37 + En este caso, el resultado (0.5) *sí* puede ser representado de manera exacta como un 38 + número de coma flotante, y es posible que los errores de redondeo de los datos de partida 39 + se cancelen entre sí - aunque no se debería confiar excesivamente en esto (e.g. cuando 40 + esos dos números fueron almacenados en representaciones de coma flotante de diferente 41 + tamaño, los errores de redondeo pueden no cancelarse entre ellos). 41 42 42 - In other cases like 0.1 + 0.3, the result actually isn't *really* 0.4, but close enough that 0.4 43 - is the shortest number that is closer to the result than to any other floating-point number. Many languages then display that number instead of converting the actual result back to the closest 44 - decimal fraction. 43 + En otros casos como 0.1 + 0.3, el resultado no es _realmente_ 0.4, pero está lo suficientemente 44 + cerca como para que 0.4 sea el número más corto que está más cerca del resultado que cualquier 45 + otro número de coma flotante. La mayoría de lenguajes presentan ese número en vez de convertir 46 + el resultado real a una fracción decimal. 47 + 48 + Si quieres más información, puedes acudir a las [referencias](/references/).
+5 -1
content/index.html
··· 10 10 ¿Por qué mis números no se suman bien? 11 11 ====================================== 12 12 13 - O sea que has escrito algún código absurdamente simple, como por ejemplo: 13 + O sea que has escrito algún código absurdamente simple, como por ejemplo<sup>1</sup>: 14 14 15 15 0.1 + 0.2 16 16 ··· 27 27 * Si te interesa, dar explicaciones detalladas de por qué los números de coma flotante tienen que funcionar así y qué otros problemas pueden surgir 28 28 29 29 Deberías ir a la sección de [Respuestas Básicas](/basic/) primero - ¡pero no termines ahí! 30 + 31 + <sup>1</sup> <small>Las Academias de la Lengua [recomiendan el punto como separador para las cifras 32 + decimales](http://www.tex-tipografia.com/marca_decimal.html), convergiendo así con 33 + la notación anglosajona que es la que se utiliza en la mayoría de lenguajes de programación.</small>
+7 -8
content/references.html
··· 1 1 --- 2 - title: References 3 - description: Documents with more in-depth information about floating-point math 2 + title: Referencias 3 + description: Documentos con más información detallada sobre aritmética de coma flotante 4 4 --- 5 5 6 - Documents that contain more in-depth information about the topics 7 - covered on this wbesite: 6 + Documentos que contienen más información detallada sobre los temas tratados en este sitio: 8 7 9 - * [Homepage of the IEEE 754 standard](http://grouper.ieee.org/groups/754/) 8 + * [Página del estándar IEEE 754](http://grouper.ieee.org/groups/754/) 10 9 * [What Every Computer Scientist Should Know About Floating-Point Arithmetic](http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html) 11 - * [Homepage of William Kahan (architect of the IEEE 754 standard, lots of interesting links)](http://www.cs.berkeley.edu/~wkahan/) 10 + * [Página de William Kahan](http://www.cs.berkeley.edu/~wkahan/) (arquitecto del estándar IEEE 754, muchos enlaces interesantes) 12 11 * [Decimal Arithmetic FAQ ](http://speleotrove.com/decimal/decifaq.html) 13 - * [Comparing floating-point numbers](http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm) 14 - * [Tool to convert numbers between bases, including fractions](http://www.easysurf.cc/cnver17.htm) 12 + * [Comparing floating point numbers, 2012 edition](http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/) 13 + * [Herramienta para convertir números entre bases, incluyendo fracciones](http://www.easysurf.cc/cnver17.htm)
+5 -5
content/xkcd.html
··· 1 1 --- 2 2 title: xkcd 3 - description: How to mess with people who've learned to *expect* rounding errors in floating-point math. 3 + description: Cómo fastidiar a la gente que ha aprendido a *esperar* errores de redondeo en aritmética de coma flotante. 4 4 --- 5 5 6 - or 7 - -- 6 + o 7 + - 8 8 9 9 <%= @item[:description] %> 10 10 ==================== 11 11 12 - ![Obligatory xkcd cartoon](http://imgs.xkcd.com/comics/e_to_the_pi_minus_pi.png "Obligatory xkcd cartoon") 12 + ![Viñeta obligatoria de xkcd](http://imgs.xkcd.com/comics/e_to_the_pi_minus_pi.png "Viñeta obligatoria de xkcd") 13 13 14 - From [xkcd](http://www.xkcd.com/217/) 14 + De [xkcd](http://www.xkcd.com/217/)
-1
layouts/default.html
··· 18 18 <div id="main"> 19 19 <h1><%= @item[:title] %></h1> 20 20 <%= yield %> 21 - 22 21 <g:plusone href="http://comaflotante.org/"></g:plusone> 23 22 <div id="license"> 24 23 <p>&copy; Publicado en <a href="http://comaflotante.org/">http://comaflotante.org/</a> bajo una licencia