Autor Tema: COMO REALIZAR MULTIPLICACION CON NUMERO ENTERO Y DECIMALES  (Leído 6691 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jhefren

  • PIC10
  • *
  • Mensajes: 42
COMO REALIZAR MULTIPLICACION CON NUMERO ENTERO Y DECIMALES
« en: 09 de Febrero de 2006, 08:28:00 »
Hola a todo

Hace poco se me prensento la necesidad de poder realizar una
multiplicación de un numero entero con un decimal:

244 * 3,75 = ?

Como hacerlo si los pic no trabajan binarios en decimal.
La solucìon que encontre es sencilla se toma el numero
decimal, se descompone de la siguiente forma:

  3,75= 3 + 0,7 + 0,05

y despues que hacer muy facil, se multiplican los enteros

   244 * 3 =  732

Ahora les doy una tabla para saber el equivalente de un
decimal a fraccion:


0.1  = 10
0,2  = 5
0,3  = 3,333 redondeamos a 3
0,4  = 2,5         "     a 3
0,5  = 2
0,6  = 1,66  redondeamos a 2
0,7  = 1,42  redondeamos a 1  
0,8  = 1,25  redondeamos a 1
0,9  = 1,11  redondeamos a 1
0,01 = 100
0,02 = 50
0,03 = 33,33 redondeamos a 33
0,04 = 25
0,05 = 12
0,06 = 16,66 redondeamos a 17
0,07 = 14,2  redondeamos a 14
0,08 = 12,5  redondeamos a 13
0,09 = 11,11 redondeamos a 11
 
Bueno, estos son los decimales màs importante para realizar
una multiplicaciòn con decimales


ahora se toma el entero a multiplicar y se divide por el
primer decimal, en nuestro caso fue 0,7, el cual equivale
según la tabla a 1:
 

   244/1   = 244

ahora hago lo mismo con el otro decimal, el cual es 0,05
y equivale a 12, entonces:

   244/12  = 20,33 redondeamos a 20

el resultado de la multiplicacion sera el siguiente:

   244*3   = 732 +

   244/1   = 244
 
   244/12  =  20
      __________

TOTAL=====>  996

En una calculador normar da: 915 lo cual representa un
error menor al  10 % (creo que de 8,5 %).

en una rutina de programa tendrias que primero
multiplicar los enteros y luego dividir por
cada uno de los decimales y al final se sumara.


Esta se me ocurrio debido a que necesitaba una multiplicacion
con decimales para un pic 16F84.

Espero que les sirva.  SI ALGUIEN TIENE UNA FORMA
MÀS SENCILLA. POR FAVOR COLOQUENLA AQUI MISMO.

GRACIAS.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: COMO REALIZAR MULTIPLICACION CON NUMERO ENTERO Y DECIMALES
« Respuesta #1 en: 09 de Febrero de 2006, 08:49:00 »
Hola jhefren, estuve leyendo tú post y me parece que te has complicado demasiado, supongamos tu cuenta:

244 x 3,75 = 915

Ahora supongamos que para no tener que trabajar con números decimales al 3,75 lo multiplicamos por 100 lo que seria 375

244 x 375 = 91500

Realizamos la multiplicación de la manera común, y luego (ya que multiplicamos por 100) dividimos nuevamente por 100 el resultado.

91500 / 100 =915

De esta forma llegamos al resultado que nos da una calculadora, y sin errores.

Espero te sea de utilidad.

Si necesitaras las rutinas para realizar las divisiones te dejo un link:

http://www.todopic.com.ar/asm/matematicas/

Un saludo, y suerte.

Atte. CARLOS



La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado jhefren

  • PIC10
  • *
  • Mensajes: 42
RE: COMO REALIZAR MULTIPLICACION CON NUMERO ENTERO Y DECIMALES
« Respuesta #2 en: 09 de Febrero de 2006, 09:22:00 »
si es verdad charly tienes razon es mas sencilla


te lo agradesco













Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: COMO REALIZAR MULTIPLICACION CON NUMERO ENTERO Y DECIMALES
« Respuesta #3 en: 09 de Febrero de 2006, 09:36:00 »
Hola jhefren, no hay nada que agradecer, para aprender y ayudar estamos, esperamos seguir viendo tú participación.

Un saludo, y suerte.

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: COMO REALIZAR MULTIPLICACION CON NUMERO ENTERO Y DECIMALES
« Respuesta #4 en: 09 de Febrero de 2006, 16:00:00 »
Las rutinas matemáticas son tal vez de las cosas mas complicadas y con las que la gente comete mas errores en el uso de microcontroladores.

Uno debe saber muy de antemano que tipo de valores le ingresará a la rutina de multiplicacion o de división para asegurarse el resultado de si realmente funcionará o no.

Este es un tema muy basto y amplio y para cada caso gralmente se le corresponde una solución diferente.

La solución propuesta por carlos es muy buena pero como dije antes... depende del caso.  Si vas a multiplicar 200 por 3.24452E5 entonces estarás en problemas o sería muy lento operar con conversiones todas a decimal.  Ni hablar si multiplicas por numeros menores a 0 como 1.5E-6 por citar algun ejemplo.

En estos casos, la generalidad de la conveniencia es la de usar operaciones con coma flotante porque se acomodan con mayor o menor precisión mas o menos a todos estos casos.

También he visto en piclist y en otros lados, rutinas que son muy optimas para calcular la raiz cuadrada, para cuando uno de los multiplicandos es constante, para cuando ambos son coma flotante, etc!

El tema de las operaciones de punto flotante es que son "lentas", si, asi es, hasta tal punto en que se trata de optimizar al máximo la cantidad de multiplicaciones a realizar y se busca de eliminar al máximo toda operacion que sea repetitiva y se la reemplaza por la constante que resulte de eso.  Es en estos puntos donde por ejemlpo en software de tiempo real que neceseitan tener cálculos muy rapido, se termina utilizando tablas precalculadas las cuales se leen y luego se "escalan" multiplicandolas por el dato que necesitamos para dar el resultado.

Esas tablas, suelen ser el resultado de varias operaciones anteriores, ya conocidas de antemano y que ayudan a l microcontrolador a realizar sus operaciones velozmente.

Por eso si se quiere generalidad, siempre hay que buscar en las operaciones de coma flotante.

Si se quiere velocidad y generalidad... ver de usar tablas.

Si se quiere velocidad, simplicidad , hay que llevar las multiplicaciones a numeros enteros tal cual lo propuso carlos,  pero teniendo en cuenta los márgenes en los cuales los operadores puedan variar.


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado kuauhtemok

  • PIC16
  • ***
  • Mensajes: 116
RE: COMO REALIZAR MULTIPLICACION CON NUMERO ENTERO Y DECIMALES
« Respuesta #5 en: 10 de Febrero de 2006, 10:14:00 »


ES CIERTO DIOS BENDIGA AL Q INVENTO LAS TABLAS !!!!     Muchas risas

La felicidad no es mas q la ausencia momentanea del dolor

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
RE: COMO REALIZAR MULTIPLICACION CON NUMERO ENTERO Y DECIMALES
« Respuesta #6 en: 10 de Febrero de 2006, 12:20:00 »
El problema de las tablas es que te limitan el rango dinamico de valores que puede tomar una variable, imaginemos que una variable esta determninada por dos octectos con o sin coma flotante, y que a su vez el resultado tambien estara determinado por dos octetos, ya tienes una tabla de 65536 entradas que necesitara 2 octectos por cada entrada, quedando una tabla de 128 kbytes. Ademas esta la incomodidad, aunque fuera posible, de hacer una tabla de tales dimensiones.
Y sin irnos a este caso con el simple hecho de que haya 256 casos el tema de la tabla ya se complica.
A favor se puede decir que los pics aunque pueden hacerlo no estan diseñados ni siquiera con la idea de que tengan que resolver problemas de esta envergadura, de ahi que no se plantee ningun tipo de optimizacion
Saludos desde Córdoba, españa

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: COMO REALIZAR MULTIPLICACION CON NUMERO ENTERO Y DECIMALES
« Respuesta #7 en: 10 de Febrero de 2006, 13:12:00 »
Escrito originalmente por kain589
El problema de las tablas es que te limitan el rango dinamico de valores que puede tomar una variable, imaginemos que una variable esta determninada por dos octectos con o sin coma flotante, y que a su vez el resultado tambien estara determinado por dos octetos, ya tienes una tabla de 65536 entradas que necesitara 2 octectos por cada entrada, quedando una tabla de 128 kbytes. Ademas esta la incomodidad, aunque fuera posible, de hacer una tabla de tales dimensiones.
Y sin irnos a este caso con el simple hecho de que haya 256 casos el tema de la tabla ya se complica.
A favor se puede decir que los pics aunque pueden hacerlo no estan diseñados ni siquiera con la idea de que tengan que resolver problemas de esta envergadura, de ahi que no se plantee ningun tipo de optimizacion


Jeje, creo que si bien es incomodo también se hace y mucho.  

Ej. cualquier vehículo que tenga inyección electrónica, tiene tablas de montones de parámetros que en vez de calcularlos, los lee de ahí. Las variables que sensa, le sirven para saber cual posicion dentro de las enormes tablas buscar.

De hecho las memorias de adaptación de los vehículos tienen varios Kbytes...

El uso de tablas es mucho mas generalizado de lo que te imaginas y de ninguna manera se ponen TODOS LOS RESULTADOS POSIBLES.  Eso sería tonto, desde el punto de vista técnico.  Simplemente se define una precisión se lo hace.

Es como calcular la tabla del coseno.  Tenemos 2 opciones o hacemos el calculo por el teorema de Taylor o ponemos 180 valores , uno por cada grado.

Si queremos mas precision entonces agregaremos valores, pero siempre será mas rapido usar tablas que calcular el coseno.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything