Los ordenadores calculan los números en 0s y 1s. Un bit puede estar en cualquiera de los dos, pero no en el medio. Por lo tanto, si introduces 3/2 en una calculadora, ésta debería devolver 1 o 2, ¿verdad? Pues no. Te da 1,5, la respuesta correcta. Incluso en los problemas más complejos, la calculadora responde con el número correcto. Así que mi pregunta es, ¿cómo funciona todo esto? Si un ordenador sólo puede usar 1s y 0s, ¿cómo es capaz de interpretar correctamente un número entre 1 y 0, y hay una manera de construir un esquema para una máquina que entienda los decimales?
Respuesta
¿Demasiados anuncios?Las calculadoras suelen trabajar en BCD, mientras que en los lenguajes de programación los números (no enteros) suelen representarse en formato binario de coma flotante como IEEE 754 .
En el caso de la coma flotante binaria, hay un número en complemento a 2 normalizado de modo que el bit más significativo es '1' (y como sabemos que es uno, podemos evitar almacenarlo y simplemente asumir que está ahí). El exponente suele ser un número binario sesgado que siempre es positivo.
Hacer una división en BCD no es tan difícil, se puede hacer con una unidad aritmética lógica (ALU) de 4 bits y un algoritmo típico de división larga (que implica un número de restas hasta que el resultado se vuelve negativo, y luego una adición), luego desplazar y repetir.
En cuanto al punto decimal o binario, puedes manejarlo por separado como una especie de exponente.
En lugar de 3/2, piensa en 30000000/20000000 = 15000000, y luego piensa dónde colocar el punto decimal.
Para sumar o restar hay que desplazar a la derecha el número más pequeño para que los exponentes sean iguales primero. Así que 3 + 0,01 de 30000000 + 100000000 -> 30000000 + 01000000 = 30100000 y el decimal se establece para obtener 3.0100000
Podrías cablear la lógica para hacer esto, pero implicaría bastantes ICs de nivel MSI para los registros, la ALU y la lógica de control, normalmente querríamos usar un microcontrolador, un ASIC (como en una calculadora) o una FPGA.