¿Existe algún sistema electrónico más preciso para el cálculo de números decimales?

Eso depende de lo que estés tratando de calcular. El punto flotante hace un gran trabajo al almacenar una amplia gama de números con una cantidad decente (flotante tipo c) o una cantidad significativa (precisión doble tipo c). Otros tipos pueden cubrir un rango que es mucho más pequeño, pero con más precisión (punto fijo). ¿Depende de si necesitas el rango o la precisión?

El tipo C flotante es de 32 bits. 1 bit de signo, 8 bits de exponente y 23 bits de mantisa. Esto cubre números en el rango positivo de aproximadamente 1.18 * 10 ^ -38 a aproximadamente 3.4 * 10 ^ 48. El rango negativo es similar. Desafortunadamente, solo obtiene aproximadamente 6.9 dígitos de resolución (log10 de 2 ^ 23) con los 23 bits.

El tipo C doble es de 64 bits. 1 bit de signo, 11 bits de exponente y 52 bits de mantisa. Esto cubre números en el rango positivo de aproximadamente 2.2 * 10 ^ -308 a aproximadamente 1.8 * 10 ^ 308. El rango negativo es similar. Obtiene aproximadamente 15,6 dígitos (log10 de 2 ^ 52) de resolución con los 23 bits.

Sin embargo, la precisión real del número, en relación con 1.0, depende del número que se esté almacenando. Si el doble nos da 15.6 dígitos de resolución y el número que estamos almacenando es 2 * 10 ^ 20, entonces nuestro error para el número almacenado es mayor que 10, lo que significa que podemos almacenar un número, pero no podemos especificarlo al El lugar de 1. Fui con 2 ^ 20 para que el número fuera lo suficientemente alto como para garantizar que no haya resolución en el lugar del 1.

Con un número de punto fijo, el programador puede especificar la resolución y el rango. El programador toma un número entero, digamos 64 bits, y decide que el valor que representa el número entero es el valor entero, dividido por una constante. Si el valor almacenado es 1.9 mil millones (1.9 * 10 ^ 9) y el divisor es 1 millón (10 ^ 6), entonces el valor representado es 1.9 mil millones / 1 millón = 1,900. Cuando se usan enteros con signo de 64 bits, esto es aproximadamente 18.9 dígitos de resolución (log10 de 2 ^ 63). Por lo tanto, el punto fijo de 64 bits es más preciso que un doble.

Cuando utilicé un punto fijo en un proyecto, utilicé números de 64 bits y decidí que el valor real era el valor entero dividido entre mil millones (10 ^ 9), así que no importa qué número estaba almacenando, la resolución siempre era 1 / (10 ^ 9) = 10 ^ -9 = 1 nano. En este caso, mi valor máximo fue de aproximadamente 9.2 * 10 ^ 9 (número entero con signo de 64 bits máximo / 1 mil millones), que es mucho menos que incluso las tiendas flotantes (3.4 * 10 ^ 48).

Los sistemas x86–64 admiten punto flotante de 80 bits con 64 bits de mantisa, lo que proporciona 19,2 dígitos de resolución (log10 de 2 ^ 64).

Nota: La mayor parte de la información es de Wikipedia y puede haber errores en los rangos que doy para los números de coma flotante. Traté de descubrir la diferencia entre los números normales y los números normales / subnormales, pero es demasiado tarde en la noche para procesar eso.

Como mencionaste a la NASA, supondré que estás hablando de cálculos en física. Los números de coma flotante de doble precisión le dan aproximadamente 15 dígitos decimales de precisión. La mayoría de las constantes físicas no se conocen en ninguna parte cerca de esa precisión, por lo que una precisión adicional no lo ayudará a obtener una mejor respuesta.

Hay sistemas aritméticos de computadora que dan mucha mayor precisión, aunque generalmente se usan con números enteros o racionales, y no tienen nada que ver con la física u otros tipos de cálculos del mundo real. Una de las aplicaciones más importantes de estos sistemas de “gran número” es la criptografía, donde debe poder multiplicar números que contengan cientos de dígitos.