Estoy seguro de que tendrá muchas respuestas prácticas a su pregunta.
Pero quizás te interese más cómo funciona detrás de la pantalla.
Bueno, en los viejos tiempos (el tiempo pre-C), estábamos acostumbrados a hacerlo manualmente, reemplazando un real por una matriz [matemáticas] x = (x_1, x_2, …, x_n) [/ matemáticas] y escribiendo piezas de algoritmos como los que aprendiste en la escuela. Para calcular z = x + y, por ejemplo, codificaría algo como
llevar = 0
para k = n hacia abajo 0
z [k] = x [k] + y [k] + llevar
llevar = 0
si z [k]> = 1000 entonces
z [z] = z [k] -1000
llevar = 1
terminara si
siguiente k
Por supuesto, esto se habría escrito con goto
lugar de for loops
y, de if then else
. Además, los índices pueden ser algo difíciles de programar, pero algunos de mis amigos obtuvieron una reputación respetuosa por su habilidad para elegir y mover conjuntos de tarjetas perforadas de forma rápida y segura con una experiencia impresionante.
Es un ejercicio instructivo escribir los mismos algoritmos para multiplicación (fácil con un doble bucle) y división (trabajo cerebral garantizado).
No creo que CAS (Mapple, matematica), ni las bibliotecas BigNumber (C ++, java, Python, …) funcionen mucho mejor. De hecho, después de un rápido vistazo en el código, puedo decirte que BigDecimal de Java no. Excepto que la n es variable y puede ser controlada por una precisión en lugar de por el número de dígitos.
Entonces, sea cual sea el paquete que elija, encontrará un ejemplo del tipo [matemáticas] 1/9 = 0.1111111 … [/ matemáticas], por lo tanto, [matemáticas] 9 * (1/9) = 0.999999 \ neq 1 [/ matemáticas]. Es suficiente reemplazar 9 por uno menos que el número base ([matemática] 2 ^ n [/ matemática] para la n apropiada). Los sistemas CAS son más difíciles de engañar porque se simplifican antes para realizar la aproximación, pero siempre se encuentra una fórmula para la cual la aproximación está más allá de su capacidad.
En el aspecto práctico, nunca, nunca termine un algoritmo en una condición como [matemática] x = 0 [/ matemática] o [matemática] x = y [/ matemática] a menos que las variables estén definidas estáticamente como enteros. Siempre use algo como [matemáticas] \ left | xy \ right | <\ epsilon [/ math].