Si las computadoras no pueden calcular números flotantes con precisión, ¿cómo funcionan las calculadoras y las computadoras científicas?

Hay dos conceptos separados que a menudo se combinan: precisión y precisión .

Por ejemplo, si te dijera que [matemáticas] \ pi = 3 [/ matemáticas], esa afirmación es muy precisa , pero solo con una precisión de 1 dígito. Ningún otro valor de un solo dígito está más cerca de [math] \ pi [/ math].

Si en cambio dije [matemáticas] \ pi = 3.0000000 [/ matemáticas], mi declaración es más precisa (8 dígitos), pero menos precisa en relación con su precisión.

La precisión indica qué tan cerca está el valor que tiene (ya sea calculado o medido) del valor “verdadero”.

La precisión indica la resolución de su valor, es decir, qué tan separados deben estar dos valores antes de poder distinguirlos.

Este diagrama ilustra:

(Fuente: “Precisión vs. Precisión … ¿Conoces la diferencia?” )


Editar: Fred Goldrich señala que pasé por alto un punto aquí, así que déjame expandirme un poco. Cuando dije que [math] \ pi = 3.0000000 [/ math] es menos preciso en relación con su precisión en comparación con [math] \ pi = 3 [/ math], no ofrecí ninguna motivación para la frase relativa a su precisión.

Cuando declaras que un número tiene un cierto número de dígitos significativos de precisión, lo que realmente estás diciendo es que el número representa el centro de un intervalo de valores. El tamaño de este intervalo está determinado por las unidades en último lugar.

Por ejemplo, cuando digo [matemáticas] \ pi = 3 [/ matemáticas] a 1 dígito significativo de precisión, el número [matemáticas] 3 [/ matemáticas] aquí realmente representa el intervalo [matemáticas] (2.5,3.5) [ /matemáticas]. Este intervalo incluye el valor real de [math] \ pi [/ math]. Este número de baja precisión corresponde a la diana en la esquina inferior izquierda del diagrama de arriba. Todas las marcas están agrupadas alrededor del centro, pero todavía hay una distribución bastante amplia entre las marcas en los extremos del rango.

Cuando digo [matemática] \ pi = 3.0000000 [/ matemática] a 8 dígitos significativos de precisión, el número [matemática] 3.0000000 [/ matemática] representa el intervalo [matemática] [2.99999995,3.00000005] [/ matemática]. Ese es un intervalo mucho más pequeño. También está lejos del verdadero valor, en términos de las unidades en último lugar . Esto corresponde a la situación en la diana superior derecha, donde todas las marcas están muy juntas, pero todo el grupo está lejos del objetivo.

Ahora, cuanto más astuto note, escribí uno de esos intervalos como un intervalo abierto, y uno como un intervalo cerrado. Eso es para mantenerlo consistente con el modo de redondeo predeterminado de IEEE 754 de redondeo a par .


La mayoría de las computadoras actualmente implementan la aritmética de coma flotante binaria IEEE 754. IEEE 754 especifica reglas muy cuidadosas para garantizar resultados precisos con la precisión disponible. También especifica diferentes grados de precisión para diferentes aplicaciones. Por ejemplo, hay precisión simple de 32 bits, precisión extendida de 43 bits y precisión doble de 64 bits.

Las reglas de redondeo en IEEE 754 son muy estrictas, lo que permite que un programador cuidadoso produzca resultados correctamente redondeados. El Dr. William Kahan, la mayor fuerza detrás de IEEE 754–1985, ha publicado varios artículos y presentaciones sobre cómo escribir algoritmos correctamente redondeados. Escritos correctamente, los algoritmos matemáticos serán precisos dentro de la precisión requerida.

Este es un punto importante: muchas personas tratan el punto flotante como “intrínsecamente borroso e inexacto”. No lo es. Existen reglas muy estrictas sobre cómo se realizan los cálculos de coma flotante, que incluyen:

  • Circunstancias bajo las cuales se requieren cálculos para ser exactos.
  • El comportamiento de redondeo preciso esperado cuando los cálculos son inexactos.

No es una “aritmética difusa” como la que podrías obtener de alguien que estima números en el reverso de una servilleta, o que podrías obtener cuando usas una regla de cálculo. Es 100% predecible y está diseñado para que sea posible escribir un buen software.

Nota : ¡ Eso no impide que la gente escriba mal software! Sin embargo, la aritmética subyacente no es el culpable allí.

Nota 2 : Sergey Zubkov señaló en otra respuesta que C y C ++ hacen que sea más difícil de lo que te gustaría escribir un buen software numérico en esos idiomas. Sin embargo, el hardware subyacente tiene reglas estrictas.

También te sorprenderá la poca precisión que realmente necesitas para obtener resultados bastante buenos. Por ejemplo, Marte está [matemáticas] 227.9 \ veces 10 ^ {9} \ mbox {m} [/ matemáticas] del sol. Un número de coma flotante de precisión simple tiene una precisión de 1 parte en [matemática] 2 ^ {24} = 16777216 [/ matemática]. Entonces, en el radio completo de la órbita de Marte, un flotador de precisión simple tiene una precisión de aproximadamente 13,6 km. Puede parecer mucho, pero en comparación con el tamaño de Marte y el tamaño de la órbita de Marte, no lo es. Un número de doble precisión tiene una precisión de 1 parte en [matemáticas] 2 ^ {54} [/ matemáticas], que es aproximadamente un millón de veces más fino. En el radio completo de la órbita de Marte, puede resolver distancias de aproximadamente 12 micras.

Ahora, cuando navegas en una nave espacial, digamos, haces cálculos relativos en lugar de cálculos absolutos. Estás más preocupado por las cosas en tu vecindad inmediata que por las cosas que están a 1 UA, incluso si tu objetivo está a 1 UA. Puede ser más preciso sobre su objetivo una vez que se acerca a él. Por lo tanto, los números de punto flotante de precisión simple suelen ser más que suficientes para algo así. Para las distancias involucradas en la navegación, la precisión simple le brinda precisión milimétrica o mejor.

Dicho todo esto, el punto flotante binario IEEE 754 no es la mejor opción para todo.

Por ejemplo, las instituciones financieras han construido su aritmética alrededor de la precisión decimal y el redondeo decimal. Esto viene de siglos de manejar los libros a mano, en decimal. Por lo tanto, los cálculos financieros a menudo usan aritmética decimal para que los resultados de la computadora coincidan con lo que se calculó previamente a mano. IEEE 854 (y más tarde, IEEE 754–2008) incluyen disposiciones para coma flotante decimal. Alternativamente, puede escribir funciones aritméticas decimales explícitas sin depender de esos estándares.

Para las aplicaciones que necesitan una precisión mucho mayor, existen muchas bibliotecas que proporcionan operaciones de punto flotante y de precisión arbitraria. Como mencioné anteriormente, la mayoría de las cosas no lo necesitan . Pero, por las pocas cosas que hacen, las bibliotecas están disponibles.

Sin embargo, es posible que se pregunte: “¿Qué pasa con todas estas cosas divertidas que suceden con números simples como 0.1 + 0.2?”

(Fuente: Saturday Morning Breakfast Cereal , una gran tira cómica en línea).

Regrese y vuelva a leer mi declaración sobre la precisión frente a la precisión. Está proporcionando valores con 1 dígito decimal de precisión, por lo que debe interpretar el resultado con solo 1 dígito decimal de precisión.

Internamente, la computadora lleva varios dígitos binarios de precisión. Los valores 0.1 y 0.2 no tienen representaciones exactas en coma flotante binaria, por lo que cuando convierte de decimal a binario y viceversa, puede obtener respuestas que parecen un poco divertidas en decimal.

La respuesta proporcionada, contraintuitivamente es precisa . Simplemente estamos mostrando demasiada precisión en relación con las entradas.

Considere el siguiente programa C:

  #include 

 int main () {
     flotador a = 0.1f;
     flotador b = 0.2f;
     flotador c = a + b;
     flotador d = 0.3f;

     printf ("% a \ n% a \ n% a \ n% a \ n% 15.12f \ n% 15.12f \ n", a, b, c, d, c, d);
     devuelve 0;
 }

El especificador de conversión %a le dice al compilador que imprima la representación binaria del número de coma flotante. Si lo ejecuta, obtendrá el siguiente resultado:

  0x1.99999ap-4
 0x1.99999ap-3
 0x1.333334p-2
 0x1.333334p-2
  0.300000011921
  0.300000011921

Observe que 0.1f + 0.2f proporciona exactamente el mismo patrón de bits que la constante 0.3f. Es completamente preciso y predecible.

Le da el patrón de punto flotante binario más cercano al valor decimal 0.3. Eso es lo más exacto posible en punto flotante de radios binarios.

Y más que suficiente para llevarte a Marte.

Sí, es cierto que la aritmética de coma flotante no puede representar 0.1 exactamente.

Como estudiante universitario de ciencias de la computación, tuve que tomar un curso titulado “Métodos numéricos”. No intentaré cubrir el contenido completo de este curso en el espacio de un párrafo. Baste decir que nos enseñaron cómo escribir código para realizar cálculos científicos precisos dentro de las limitaciones del hardware disponible.

Avancemos 3 años y estoy trabajando en una planta de fabricación de placas de circuito impreso para IBM. El laboratorio fotográfico hace máscaras maestras de vidrio y versiones de película de la misma. Su trazador está controlado por una computadora de 16 bits. Necesitaba proporcionar un interruptor de película / vidrio para compensar la contracción minúscula pero mensurable al procesar máscaras maestras de película. Esto requirió una precisión de 64 bits. No es un problema si uno entiende las implicaciones del software y escribe el código en consecuencia.

Del mismo modo, las trayectorias interplanetarias a las que se hace referencia en la pregunta se pueden calcular con una precisión mayor que la que el hardware haría creer que es posible.

Más allá de la discusión de la aproximación del número infinito de números reales por un conjunto finito de números decimales,

Cuando escribe software para resolver problemas, necesita que el software se adapte para converger a la solución real.

Esto a menudo se realiza mediante un control de tamaño que controla el error local y

pruebas de que el software convergerá a la solución real a medida que se controla el error local.

Dichos algoritmos generalmente son diseñados por un analista numérico e implementados por un ingeniero de software.

Las computadoras son muy precisas. Tienen precisión limitada. Ignora la computadora y considera el problema análogo muy real que enfrentan los humanos al hacer matemáticas. Considere un solo dígito, puede usarse para describir cualquier número entero entre 0 y 9, pero si queremos describir números fraccionarios o números mayores que 9, entonces debemos introducir dígitos adicionales. Hay un reino entero de números infinitamente incontables en tamaño, pero con un solo dígito de base 10 solo podemos describir 10 de estos números.

Entonces, introducimos un segundo dígito y ahora tenemos 10 × 10 de estas combinaciones de símbolos para rociar sobre nuestra recta numérica. Todavía no puedo describir 100 o 0.5, pero puedo acercarme diciendo 99 o 0. Así que introducimos más y más dígitos, pero solo una cantidad finita, después de todo “no hay nadie que tenga tiempo para eso”.

Digamos que la persona promedio está dispuesta a escribir 30 dígitos antes de darse por vencido y decir “lo suficientemente cerca”. Esto significa que puede escribir 10 ^ 30 combinaciones únicas de dígitos y usar cada uno de esos combos que se pueden usar para hacer referencia a un número único o grupo de números. Una vez que introducimos un punto decimal, vemos que hay 31 lugares donde podemos empujar el punto decimal.

Entonces hay 31 * 10 ^ 30 combinaciones de dígitos decimales que podemos hacer. Algunos de estos no son únicos, expresan el mismo número que un combo diferente, pero no debemos preocuparnos por ellos, ya que solo reducen el número único que el escritor humano puede expresar a mano. Lo importante es que hay un número infinito de números que el escritor humano puede desear describir y hacer cálculos matemáticos, pero sin la capacidad de manipular un número infinito de caracteres, el escritor solo puede expresar un número finito de números.

Sin embargo, está bien, los humanos no están interesados ​​en la mayoría de los números, y para números trascendentales como PI, una aproximación de varios dígitos es lo suficientemente buena. Hemos aprendido a lidiar con nuestros límites enfocándonos en dígitos significativos y usando exponentes para aproximar números, también conocida como notación científica.

En esencia, las computadoras usan exactamente la misma notación científica que los humanos, aunque usan dígitos de base 2 en lugar de base 10. Aunque coinciden con la misma limitación de los humanos para escribir y calcular solo un número finito de dígitos, las computadoras pueden calcular muchos más dígitos de lo que una calculadora humana podría esperar. Esto también conduce a una mayor precisión que la que podría lograr una calculadora humana.

En esencia, las computadoras que operan con 2 números de coma flotante toman un número binario científicamente anotado y usan aritmética básica para manipular los números que se operan para calcular una suma, producto, diferencia o razón. Consulte la siguiente Wikipedia para obtener una explicación sobre la representación estándar:

Formato de punto flotante de precisión simple – Wikipedia

En su mayor parte, a las personas no les importa la diferencia entre 2.5 y 2.5000000000000000000000001 a menos que sean teóricos del caos. Una computadora puede carecer de la capacidad de representar el segundo número con precisión perfecta, pero no tiene problemas para representar dichos números con precisión.

Varias respuestas se han extendido mucho para explicar la diferencia entre precisión y precisión. Sin embargo, la idea errónea general es que los números de “punto flotante de computadora” (generalmente conocidos como “flotante”) son de alguna manera menos correctos que otros sistemas.

Sin almacenamiento y potencia de procesamiento infinitos, cualquier representación numérica es imprecisa para algunos valores.

  • Concepto erróneo: el uso flotante de binario (base 2) significa que no puede representar muchos números, como 0.1 .
    Como ejercicio simple, escriba [math] \ frac {1} {3} [/ math] en decimal .

La mayoría de las personas probablemente comenzarán con [matemáticas] 0.33 [/ matemáticas], luego, después de algunos empujones, aparecerán [matemáticas] 0.33333 [/ matemáticas] (quizás algunos sepan lo que significa [matemáticas] 0.3 \ overline {3} [/ matemáticas] , pero conservemos eso para más tarde). Ninguno de ellos será absolutamente correcto, nunca . Usando d dígitos fraccionarios, el error es [matemática] \ frac {1} {3 \ veces10 ^ d} [/ matemática].

Cualquier sistema numérico con una base fija tiene una precisión limitada. Los errores por falta de precisión son deterministas.

  • Concepto erróneo: el flotador es, por diseño, limitado en su precisión.
    Como ejercicio simple, escriba 3.298 como una fracción con el mismo número de dígitos .

Esto es principalmente un ejercicio de diligencia: puede escribir [matemáticas] 32/10 [/ matemáticas], o limitarlo a [matemáticas] 98/30 [/ matemáticas], [matemáticas] 92/28 [/ matemáticas] etc. o use una herramienta y obtenga [matemáticas] 89/27 [/ matemáticas]. Ninguno de ellos será absolutamente correcto, nunca . Usando un número fijo de espacio, la cantidad de números representables con precisión es limitada.

Cualquier sistema numérico tiene una precisión limitada dado un espacio limitado. A su vez, la precisión se puede aumentar aumentando el espacio [matemática] ^ 1 [/ matemática].


La simple verdad es que el cálculo numérico es, por definición , impreciso , fuera de un número finito de casos [matemática] ^ 2 [/ matemática]. Asumir una precisión perfecta sin verificar explícitamente todas las condiciones de contorno no funciona.

La otra verdad simple es que los cálculos numéricos solo tienen que ser lo suficientemente precisos para que las cosas no exploten. Cuando se coloca un rover en Marte, no alcanza el objetivo deseado por unos pocos milímetros.

[matemáticas] ^ 1 [/ matemáticas] Es por eso que existe flotación de double precisión ( double en el mundo C).

[matemáticas] ^ 2 [/ matemáticas] Las matemáticas hablan por “no cuentes con eso”.

Podemos controlar cuán precisos son esos números, decidiendo cuántos bits se usarán en los números de coma flotante. Tampoco hay nada que te obligue a usar números de coma flotante. Existen alternativas, como la aritmética de punto fijo, el decimal codificado en binario, etc.

En cualquier caso, sus cálculos no serán más precisos que sus mediciones, y a menudo el grado de error en las mediciones es mucho mayor que cualquier error que pueda introducir la representación de números de la computadora.

Cuando los científicos tratan con números, a menudo incluyen la incertidumbre. Por ejemplo, puede ver la distancia entre dos puntos expresada como:

5.1 +/- 0.02 cm

Entonces, está en algún lugar entre 5.08 y 5.12 cm. Al hacer cálculos, los científicos usan métodos matemáticos para la propagación de errores. Esto les permite tomar el error en cada estimación y usarlo para obtener el rango potencial de error de su cálculo final.

Las computadoras pueden compilar números flotantes con precisión, simplemente necesita indicarles cómo hacerlo.

Hace 2 semanas, lancé mi propio marco de JavaScript: DisplayJS

Debido a que me molestaban las operaciones flotantes que devolvían una respuesta incorrecta, implementé un conjunto de operaciones básicas, a través de un objeto que llamé “matemáticas”.

Entonces, sí, las computadoras pueden calcular números flotantes.

  • No hay forma de representar números irracionales con precisión. Es por eso que usamos álgebra para simplificar expresiones que involucran pi y e y otros números irracionales para manejar la imprecisión inherente de representar estos términos.
  • La mayor parte de la división tiene un resto, de modo que no hay una forma general de representar cocientes con precisión.
  • Toda medición está plagada de incertidumbre debido al Principio de incertidumbre de Heisenberg. No podemos medir perfectamente, por lo que la imprecisión está bien en todos los cálculos que involucran mediciones.
  • Muchas calculadoras y algunas computadoras usan bibliotecas de coma flotante decimal que pueden representar exactamente todas las sumas y productos. Los números que obtiene de estas calculadoras están definidos con precisión por los números que ingresa, pero los números que ingresa aún están sujetos a imprecisiones en la medición.

Resulta que generalmente no necesitamos mucha precisión. Cuando decimos que el universo tiene 13 mil millones de años luz de diámetro, estamos argumentando que está más cerca de 13 que de 12, no que está más cerca de 13.00000 que de 13.00001. Cuando decimos que se agregaron 230,000 jubs a la economía este mes, queremos decir que estaba más cerca de 230 que de 231, no es que estuviera más cerca de 230,000 que de 230,001. Los cálculos que haces con estos números bastante especulativos solo importan en los dos o tres dígitos más significativos de su resultado, y luego solo si tuvimos cuidado. Construimos cohetes lunares y aviones a reacción utilizando reglas de deslizamiento como nuestra ayuda principal para el cálculo, y estos tienen una precisión máxima de 3 dígitos.

Lo perfecto es el enemigo de lo bueno. No necesitamos ser perfectos, lo cual es bueno, porque no podemos serlo.

Las computadoras pueden, pero no tienen soporte directo de hardware para ello. Es posible implementar lo que quiera dentro de los límites de la memoria de trabajo. He usado dos bibliotecas para este propósito:

Biblioteca de precisión arbitraria para Java y C ++, applets y calculadora.

La biblioteca GNU MP Bignum

Creo que Java tiene una biblioteca de enteros arbitrariamente grande (también creo que .Net / C # … también la tiene). Python te da esos enteros por defecto. He tenido buen éxito al usar enteros arbitrariamente grandes para representar fracciones, y los usé para representar números de “punto flotante”, como 0.1 se puede representar como 1/10 y así sucesivamente.

Usé estas fracciones en matrices grandes, pero luego tuve que simplificar continuamente las fracciones (transformando de 2/4 a 1/2, etc.) después de cada operación aritmética o de lo contrario crecerían bastante rápido y luego obtendría un rendimiento mucho peor.

También hacen cálculos inexactos. Están diseñados para tener la precisión suficiente para manejar los tipos de cálculos de rutina que normalmente les pedimos que hagan.

Las computadoras a gran escala tienden a tener que lidiar con cálculos mucho más complejos y largos, donde las inexactitudes se acumulan y pueden causar problemas importantes. También hay situaciones en las que rara vez se encontrará una calculadora, pero que otras computadoras tratan con más frecuencia. Por ejemplo, una computadora en un avión que está ayudando a navegar el avión puede tener que hacer algunos cálculos muy especiales cerca del ecuador cuando algunos de los cálculos pueden salir mal debido a las funciones trigonométricas que van a 0 o al infinito en el ecuador. Algo similar sucede en los polos.

¡Las calculadoras se parecen menos a las computadoras de lo que probablemente piensas! Consideraré las computadoras, ya que ofrecen enfoques más generales.

La aritmética de enteros para enteros “cortos” (por ejemplo, hasta [matemática] 2 ^ {32} -1 [/ matemática]) será exacta; la división es exacta siempre que se conserven un resto y un cociente. El soporte de punto flotante en hardware generalmente permitirá números “más largos”, pero estos son difíciles de combinar con gracia para obtener una precisión adicional. De hecho, es posible que la precisión (o rango) disponible de los tipos de punto flotante admitidos directamente en el hardware sea inadecuada. También es posible que una secuencia de cálculos elementales pierda parte o la totalidad de la precisión en el camino hacia un resultado final.

¿Qué debe hacer la computadora si el hardware de punto flotante es demasiado limitado? En última instancia, a pesar de las diferencias en los detalles, las mismas cosas que haría. Aprende algoritmos para manipular partes de números, divididos en lo que corresponde a lugares contiguos en un sistema de valor posicional (en su caso, probablemente base 10: para una computadora, más probablemente base [matemática] 2 ^ {32} [/ matemática ]). Siempre que pueda hacer aritmética exactamente en segmentos cortos (donde “exactamente” incluye hacer un seguimiento de los restos después de la división), puede construir eso en aritmética exacta en números más largos.

Ahora puede manejar la aritmética en números más largos, puede evaluar expresiones aritméticas más grandes y usar aproximaciones suficientemente buenas para, por ejemplo, funciones elementales. Existen métodos generales para resolver muchos problemas mediante aproximaciones sucesivas; Están ahí para ser utilizados.

Esto no es más que un dedo del pie sumergido en las aguas profundas y peligrosas del análisis numérico de alta precisión y precisión múltiple. En realidad, saber qué precisión necesita o determinar cuándo no ha sido suficiente para que pueda volver a intentarlo con mayor precisión puede ser muy difícil. Sin embargo, el problema no es que la precisión adicional simplemente no esté disponible debido a limitaciones de hardware.

Los números de punto flotante se han discutido extensamente en varias otras respuestas aquí, y todos lo cubren muy bien.

Otra cosa a tener en cuenta es que algunas calculadoras (¿la mayoría?) No usan números de coma flotante para la mayoría de sus cálculos. En cambio, usan algo como decimal codificado en binario.

Lo que esto hace es tratar los números decimales más como enteros, simplemente haciendo un seguimiento de dónde está el punto decimal, y calculando en su lugar usando aritmética de punto fijo. Como ejemplo, un número binario de 8 bits puede contener cualquier valor de 0 .. 255. Sin embargo, si lo observa, verá que cualquier dígito único (0..9) puede representarse como 4 bits, por lo que puede use un valor de 8 bits con BCD para representar cualquier número entre 0 .. 99. Luego puede usar la suma, resta, división y multiplicación de BCD en los números y siempre tendrá un mapeo exacto 1: 1 entre un valor BCD y un número decimal real, en lugar de tratar con números binarios de coma flotante que pueden representar un rango de valores positivamente astronómico, pero no mapean con precisión 1: 1 a números decimales de coma flotante.

La desventaja de BCD es que se necesita más espacio de almacenamiento para mantener un rango dado de números y la aritmética es un poco más complicada ya que no está trabajando con los valores binarios sin procesar reales de los números.

Para responder a la pregunta, las computadoras pueden usar un número arbitrario de bits para realizar operaciones matemáticas (restringidas solo por la memoria y el tiempo extra para realizar las operaciones) .

Si los tipos de datos de la CPU admitidos en el hardware (generalmente punto flotante de precisión simple o doble) no son lo suficientemente precisos, hay bibliotecas que manejan números de precisión arbitrarios que puede usar.

El módulo decimal de Python es una buena introducción, para C / C ++ checkout GMP.

Los cálculos con números de coma flotante tienen una ligera imprecisión por la misma razón por la que no puede escribir el resultado exacto de 10/3 en una hoja de papel sin recurrir a fracciones. Siempre habrá momentos en los que simplemente no podrá almacenar ciertos números en la cantidad limitada de bits asignados, o incluso con un número ilimitado de bits.

Sin embargo, no es necesario. Solo necesita acercarse lo suficiente para que los errores de redondeo sean irrelevantes. No es necesario que sea absolutamente perfecto antes del lanzamiento, puede hacer correcciones de rumbo en el camino mientras rastrea su vehículo y su camino.

Las computadoras tampoco pueden calcular el punto fijo con fracciones, solo asegúrese de tener suficientes bits disponibles para que el error sea demasiado pequeño para importar.

Digamos que tiene un punto fijo de 32 bits y, por ejemplo, trata los 16 bits inferiores como decimales, lo más cercano que puede obtener es 0.0000152587890625 a un valor. (1/65536)

El punto fijo se simula en el software, por lo que depende de usted cómo trata el decimal 1.0
en una división de 24–8, por ejemplo, el 1.0 sería: Binario 1_0000_0000
o dec256 o hex100

Una calculadora completa un número como 22 ÷ 3. La respuesta es lo suficientemente precisa si desea cortar una tabla en 3 longitudes iguales y su hoja de sierra tiene 1/8 de ancho. La respuesta calculada será más precisa de lo que puede obtener con su cinta métrica y su sierra.

Si su computadora puede o no calcular “con precisión” números flotantes depende de cuán preciso sea necesario. En la banca, por ejemplo, lidiar con millones de transacciones que suman miles de millones de dólares, redondeando hacia arriba y hacia abajo cuando cada transacción solo puede ser de 2 decimales; ese nivel de inexactitud puede sumar un montón de centavos perdidos.

O si su computadora está calculando algo realmente enorme e importante, la precisión es mucho más importante que cortar esa tabla de 22 “a la perfección. Digamos que le digo que 1 onza de combustible de hidrógeno puede levantar una libra a un pie y necesito tu computadora para decirme cuántas toneladas de combustible necesito para levantar un cohete de 20 toneladas en órbita. Querrás que tu computadora sea MUCHO más precisa que la calculadora que usaste cuando cortaste esa placa porque si su computadora me dice que 20 libras tienen muy poco combustible, un cohete de 100 millones y 5 astronautas se estrellarán y arderán.

¿Es válida su suposición subyacente? Cuando afirma que “las computadoras no pueden calcular números flotantes con precisión”, ¿se refiere al error Pentium FDIV (Wikipedia)? Tal vez sea así. Parece que el mundo de la informática nunca ha sacudido el estigma de ese fiasco.