Autor Tema: como multiplicar Q15 por un entero  (Leído 2908 veces)

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

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
como multiplicar Q15 por un entero
« en: 22 de Junio de 2011, 22:28:08 »
Hola, quisiera saber como realizar una multiplicacion entre numeros decimales de punto fijo (Q15) con algun numero entreo normal. por ejemplo ;

x1=Q15(0.000123);
x2=4094;

res=x1*x2;

se que si multiplico 2 Q15 el resultado es en el mismo formato, pero como haria la operacion de arriba
"Nada es imposible, no si puedes imaginarlo"

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: como multiplicar Q15 por un entero
« Respuesta #1 en: 23 de Junio de 2011, 02:25:14 »
Lo mas sencillo es que intentes realizar la operacion utilizando numeros Q16, estos pueden manejar enteros y fraccionales.

saludos!!

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: como multiplicar Q15 por un entero
« Respuesta #2 en: 23 de Junio de 2011, 09:52:55 »
Lo mas sencillo es que intentes realizar la operacion utilizando numeros Q16, estos pueden manejar enteros y fraccionales.

saludos!!
gracias por la idea
no se me habia ocurrido, pero entonces mi resultado seria del tipo "long"? o me equivoco, como lo pasaria despues a un entero de 16bits?
"Nada es imposible, no si puedes imaginarlo"

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: como multiplicar Q15 por un entero
« Respuesta #3 en: 24 de Junio de 2011, 15:40:56 »
si el resultado es fraccional, es simple, solamente tomas los 16 bits menos significativos y les das un corrimiento a la deracha (por el bit de signo). De lo contrario hay que escalar el resultado para que te dé un numero entre -1 y 1 y posteriormente tomas los digitos menos significativos. Otra opcion es que si puedes prescindir de la parte fraccional, es tomar los 16 bits mas significativos y ponerlos en una variable int.
Finalmenta la ultima opcion es pasar la cifra a flotante.

espero te sirva de algo

saludos

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: como multiplicar Q15 por un entero
« Respuesta #4 en: 25 de Junio de 2011, 00:27:48 »
gracias por la ayuda Fram, entonces los manejaria como enteros "long"  y mi parte entera serian los bits del 16-31, y mis decimales serian del 0-15., lo que no entendi muy bien es como manejar el signo de mis numeros fraccionales

lo que me intereza es realizar operaciones entre fraccionales y enteros, pero al final solo usaria el numero entero.

de antemano gracias
"Nada es imposible, no si puedes imaginarlo"

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: como multiplicar Q15 por un entero
« Respuesta #5 en: 25 de Junio de 2011, 01:23:50 »
en eso caso es mas simple:

suponque multiplicas 10 por 0.5 utilizando q16, entonces tendrias:

0x000A0000 (10) * 0x00008000 =0x000050000

los 16 bits mas significaticos serian tu parte real (0005), y el bit de signo ya viene integrado, en el caso de que quisieras la parte fraccional seria un poco mas complejo.

entonces suponte que tienes una variable de tipo int llamada resultado_entero que es donde quieres la parte entera y otra que se llama resultado_fraccional que es tu variable de tipo long que parte entera y fraccional, simplemente harias lo siguiente:

resultado_entero=(resultado_fraccional)>>16;

y ais ya tienes la parte entera de la multiplicacion.

espero te sea de utilidad

saludos!!

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: como multiplicar Q15 por un entero
« Respuesta #6 en: 25 de Junio de 2011, 01:43:03 »
ha, ok, entonces solo realizaria las multimplicaiones normalmente, siempre considerando que en los bits menos significativos tendria mi parte fraccional y en los msb mi parte entera.

muchas gracias por la explicacion
"Nada es imposible, no si puedes imaginarlo"


 

anything