Hola
Respondiendo a RGL sobre un problema de matematicas, me vino la inspiracion, y he expuesto un modo de como tratar los numeros en coma flotante. Para que lo disfruteis tod@s (siempre que el algoritmo sea efectivo) os lo pongo aqui, a alcance publico. Es un copiar-pegar del post que hice a RGL:
---------------------------------------------------------------------
MULTIPLICACION CON COMA EN 1 OPERANDO
---------------------------------------------------------------------
1.9*30 = (10*30)+(9*30) / 10
Supongamos 1.9*25 = 47.5
1.9*25 = (10*25)+(9*25) / 10 = 47.5
PERO SUPONGAMOS QUE NO HAY SOPORTE PARA COMA, ENTONCES EL RESULTADO LO ALMACENAREMOS EN DOS VARIABLES, UNO SERA EL ENTERO Y EL OTRO , UNA POTENCIA DEL 10 (1 = 10^1 , 2=10^2...)
entonces:
47.5 seria lo mismo que : 475 y 1 (desplazamiento de la coma a la IZQUIERDA)
si luego queremos re-usar este numero:
"47.5 * 3"
Seria: 475 * 3 = 1425 , y como la segunda variable = 1 , pues supondremos que es 142.5, por si queremos enviar la variable serialmente o a un LCD, siempre como si fuera un STRING.
---------------------------------------------------------------------------
MULTIPLICACION CON COMA EN DOS OPERANDOS
---------------------------------------------------------------------------
Ahora un poco mas complejo:
"4.7 * 3.2"
= (40*3.2)+(7*3.2) / 10
Y usando las reglas anteriores:
>>40*3.2 = 3.2*40 = (30*40)+(2*40) =1280 , segunda variable=1
>>7*3.2 = 3.2*7 = (30*7)+(2*7) = 224 , segunda variable(II) = 1
Ahora, cogeriamos tantos numeros desde la derecha como el valor de "segunda variable":
1280 , s.v=1 >> 128 y 0
224 , s.v=1 >> 22 y 4
Sumamos las dos por separado:
128+22=150
0+4=4
Y volvemos a juntarlas
150 y 4 = 1504 , s.v=1
Aqui no acaba la cosa, la operación en sí llevaba /10, por lo que:
s.v=2
Resultado: 1504, s.v=2 (15.04)