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.

Traducida la sección de punto flotante

+49 -47
+2 -2
content/basic.html
··· 1 1 --- 2 - title: Respuestas Básicas 2 + title: Respuestas básicas 3 3 description: Respuestas concisas a preguntas básicas sobre aritmética de punto flotante, como «¿por qué mis números no se suman bien?» 4 4 --- 5 5 ··· 45 45 otro número de punto flotante. La mayoría de lenguajes presentan ese número en vez de convertir 46 46 el resultado real a una fracción decimal. 47 47 48 - Si quieres más información, puedes acudir a las [referencias](/references/). 48 + Si quieres más información, puedes acudir a las [Referencias](/references/).
+38 -34
content/formats/fp.html
··· 1 1 --- 2 - title: Números de Coma Flotante 3 - description: Explicación de cómo funcionan los números de coma flotante y para qué son útiles 2 + title: Números de Punto Flotante 3 + description: Explicación de cómo funcionan los números de punto flotante y para qué son útiles 4 4 --- 5 5 6 - Por qué son necesarios los números de coma flotante 6 + Por qué son necesarios los números de punto flotante 7 7 --------------------------------------------------- 8 8 9 9 Como la memoria de los ordenadores es limitada, no puedes almacenar números ··· 20 20 embargo, solo se necesita precisión *relativa*. Para satisfacer al físico, debe 21 21 ser posible hacer cálculos que involucren números de órdenes muy dispares. 22 22 23 - 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 *coma flotante*. 23 + 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 *punto flotante*. 24 24 25 - How floating-point numbers work 26 - ------------------------------- 27 - The idea is to compose a number of two main parts: 25 + Cómo funcionan los números de punto flotante 26 + -------------------------------------------- 28 27 29 - * A **significand** that contains the number's digits. Negative significands represent negative numbers. 30 - * An **exponent** that says where the decimal (or binary) point is placed relative to the beginning of the significand. Negative exponents represent numbers that are very small (i.e. close to zero). 28 + La idea es descomponer el número en dos partes: 31 29 32 - Such a format satisfies all the requirements: 30 + * Una **mantisa** (también llamada coeficiente o significando) que contiene los dígitos del número. Mantisas negativas representan números negativos. 31 + * Un **exponente** que indica dónde se coloca el punto decimal (o binario) en relación al inicio de la mantisa. Exponentes negativos representan números menores que uno. 33 32 34 - * It can represent numbers at wildly different magnitudes (limited by the length of the exponent) 35 - * It provides the same relative accuracy at all magnitudes (limited by the length of the significand) 36 - * It allows calculations across magnitudes: multiplying a very large and a very small number preserves the accuracy of both in the result. 33 + Este formato cumple todos los requisitos: 37 34 38 - Decimal floating-point numbers usually take the form of [scientific notation](http://en.wikipedia.org/wiki/Scientific_notation) with an 39 - explicit point always between the 1st and 2nd digits. The exponent is 40 - either written explicitly including the base, or an **e** is used to 41 - separate it from the significand. 35 + * Puede representar números de órdenes de magnitud enormemente dispares (limitado por la longitud del exponente). 36 + * Proporciona la misma precisión relativa para todos los órdenes (limitado por la longitud de la mantisa). 37 + * Permite cálculos entre magnitudes: multiplicar un número muy grande y uno muy pequeño conserva la precisión de ambos en el resultado. 42 38 43 - | Significand | Exponent | Scientific notation | Fixed-point value | 44 - |-------------|----------|---------------------|-------------------| 39 + Los números de coma flotante decimales normalmente se expresan en 40 + [notación científica](http://es.wikipedia.org/wiki/Notaci%C3%B3n_cient%C3%ADfica) con un 41 + punto explícito siempre entre el primer y el segundo dígitos. El exponente o bien 42 + se escribe explícitamente incluyendo la base, o se usa una **e** para 43 + separarlo de la mantisa. 44 + 45 + | Mantisa | Exponente | Notación científica | Valor en punto fijo | 46 + |---------|-----------|---------------------|---------------------| 45 47 | 1.5 | 4 | 1.5 &sdot; 10<sup>4</sup> | 15000 | 46 48 | -2.001 | 2 | -2.001 &sdot; 10<sup>2</sup> | -200.1 | 47 - | 5 | -3 | 5 &sdot; 10<sup>-3</sup> | 0,005 | 49 + | 5 | -3 | 5 &sdot; 10<sup>-3</sup> | 0.005 | 48 50 | 6.667 | -11 | 6.667e-11 | 0.0000000000667 | 49 51 50 - The standard 51 - ------------ 52 - Nearly all hardware and programming languages use floating-point numbers in the same binary formats, which are defined in the [IEEE 754](http://en.wikipedia.org/wiki/IEEE_754-2008) standard. The usual formats are 32 or 64 bits in total length: 52 + El estándar 53 + ----------- 53 54 54 - | Format | Total bits | Significand bits | Exponent bits | Smallest number | Largest number | 55 - |--------|------------|------------------|---------------|-----------------|----------------| 56 - | Single precision | 32 | 23 + 1 sign | 8 | ca. 1.2 &sdot; 10<sup>-38</sup> | ca. 3.4 &sdot; 10<sup>38</sup>| 57 - | Double precision | 64 | 52 + 1 sign | 11 | ca. 5.0 &sdot; 10<sup>-324</sup> | ca. 1.8 &sdot; 10<sup>308</sup> | 55 + Casi todo el hardware y lenguajes de programación utilizan números de punto flotante en los mismos 56 + formatos binarios, que están definidos en el estándar [IEEE 754](http://es.wikipedia.org/wiki/IEEE_coma_flotante). 57 + Los formatos más comunes son de 32 o 64 bits de longitud total: 58 58 59 - Note that there are some peculiarities: 59 + | Formato | Bits totales | Bits significativos | Bits del exponente | Número más pequeño | Número más grande | 60 + |---------|--------------|---------------------|--------------------|--------------------|-------------------| 61 + | Precisión sencilla | 32 | 23 + 1 signo | 8 | ~1.2 &sdot; 10<sup>-38</sup> | ~3.4 &sdot; 10<sup>38</sup>| 62 + | Precisión doble | 64 | 52 + 1 signo | 11 | ~5.0 &sdot; 10<sup>-324</sup> | ~1.8 &sdot; 10<sup>308</sup> | 60 63 61 - * The **actual bit sequence** is the sign bit first, followed by the exponent and finally the significand bits. 62 - * The exponent does not have a sign; instead an **exponent bias** is subtracted from it (127 for single and 1023 for double precision). This, and the bit sequence, allows floating-point numbers to be compared and sorted correctly even when interpreting them as integers. 63 - * The significand's most significant bit is assumed to be 1 and omitted, except for special cases. 64 - * There are separate **positive and a negative zero** values, differing in the sign bit, where all other bits are 0. These must be considered equal even though their bit patterns are different. 65 - * There are special **positive and negative infinity** values, where the exponent is all 1-bits and the significand is all 0-bits. These are the results of calculations where the positive range of the exponent is exceeded, or division of a regular number by zero. 66 - * There are special **not a number** (or NaN) values where the exponent is all 1-bits and the significand is *not* all 0-bits. These represent the result of various undefined calculations (like multiplying 0 and infinity, any calculation involving a NaN value, or application-specific cases). Even bit-identical NaN values must *not* be considered equal. 64 + Hay algunas pecularidades: 65 + 66 + * La *secuencia de bits* es primero el bit del signo, seguido del exponente y finalmente los bits significativos. 67 + * El exponente no tiene signo; en su lugar se le resta un **desplazamiento** (127 para sencilla y 1023 para doble precisión). Esto, junto con la secuencia de bits, permite que los números de punto flotante se puedan comparar y ordenar correctamente incluso cuando se interpretan como enteros. 68 + * Se asume que el bit más significativo de la mantisa es 1 y se omite, excepto para casos especiales. 69 + * Hay valores diferentes para **cero positivo y cero negativo**. Estos difieren en el bit del signo, mientras que todos los demás son 0. Deben ser considerados iguales aunque sus secuencias de bits sean diferentes. 70 + * Hay valores especiales **no numéricos** (NaN, «not a number» en inglés) en los que el exponente es todo unos y la mantisa *no* es todo ceros. Estos valores representan el resultado de algunas operaciones indefinidas (como multiplicar 0 por infinito, operaciones que involucren NaN, o casos específicos). Incluso valores NaN con idéntica secuencia de bits *no* deben ser considerados iguales.
+4 -6
content/index.html
··· 1 1 --- 2 - title: Lo Que Todo Programador Debería Saber Sobre Aritmética de Punto Flotante 2 + title: Lo que todo programador debería saber sobre aritmética de punto flotante 3 3 description: 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 4 4 verification: True 5 5 --- ··· 26 26 * Decirte cómo lidiar con este problema 27 27 * 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 28 28 29 - Deberías ir a la sección de [Respuestas Básicas](/basic/) primero - ¡pero no termines ahí! 29 + Deberías ir a la sección de [Respuestas básicas](/basic/) primero - ¡pero no termines ahí! 30 30 31 31 ### Sobre la notación y la nomenclatura 32 32 ··· 39 39 (<a href="http://www.fundeu.es/">Fundéu BBVA</a>) especificó en una consulta 40 40 que debe haber correspondencia con el criterio adoptado para la marca decimal. 41 41 42 - <ol> 43 - <li>http://www.tex-tipografia.com/marca_decimal.html</li> 44 - <li>http://www.tex-tipografia.com/ortografia_notaciones.html</li> 45 - </ol> 42 + 1. *La marca decimal* &lt;<a href="http://www.tex-tipografia.com/marca_decimal.html">http://www.tex-tipografia.com/marca_decimal.html</a>&gt; 43 + 2. *Las notaciones científicas en la Ortografía académica* &lt;<a href="http://www.tex-tipografia.com/ortografia_notaciones.html">http://www.tex-tipografia.com/ortografia_notaciones.html</a>&gt;
+5 -5
layouts/default.html
··· 31 31 <h2>La Guía del Punto Flotante</h2> 32 32 <ul> 33 33 <li><a href="/">Inicio</a></li> 34 - <li><a href="/basic/">Respuestas Básicas</a></li> 34 + <li><a href="/basic/">Respuestas básicas</a></li> 35 35 <li><a href="/references/">Referencias</a></li> 36 36 <li><a href="/xkcd/">xkcd</a></li> 37 37 </ul> 38 38 39 39 <h2>Formatos Numéricos</h2> 40 40 <ul> 41 - <li><a href="/formats/binary/">Fracciones Binarias</a></li> 42 - <li><a href="/formats/fp/">Punto Flotante</a></li> 43 - <li><a href="/formats/exact/">Tipos Exactos</a></li> 44 - <li><a href="/formats/integer/">Sobre Usar Enteros</a></li> 41 + <li><a href="/formats/binary/">Fracciones binarias</a></li> 42 + <li><a href="/formats/fp/">Punto flotante</a></li> 43 + <li><a href="/formats/exact/">Tipos exactos</a></li> 44 + <li><a href="/formats/integer/">Sobre usar enteros</a></li> 45 45 </ul> 46 46 47 47 <h2>Errores</h2>