TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: manex_1987 en 21 de Abril de 2008, 04:46:18

Título: Division en coma flotante erronea!?!? (C30)
Publicado por: manex_1987 en 21 de Abril de 2008, 04:46:18
Hola.

Uso C30 3.01. La cuestion es muy simple:

#define PHI_ENC 3.37
ZENBAT=90  (es un unsigned int)

Enc_Pultsu_Kop=(unsigned int)((float)ZENBAT/(float)PHI_ENC);

Y la respuesta deberia ser 26.7 no? Pues para nuestro amigo C30, es 18.53.

Alguna explicacion? Bug?

Me tienen harto.

Un saludo!
Título: Re: Division en coma flotante erronea!?!? (C30)
Publicado por: manex_1987 en 21 de Abril de 2008, 04:53:19
Ok.

Enc_Pultsu_Kop=(unsigned int)((float)ZENBAT)/((float)PHI_ENC);

Y funciona bien. Alguien puede explicarme el porqué?

Gracias!
Título: Re: Division en coma flotante erronea!?!? (C30)
Publicado por: migsantiago en 21 de Abril de 2008, 19:48:14
Hola

Unas preguntas...

¿Qué tipo de variable es Enc_Pultsu_Kop?
Si le pides un casting de unsigned int, ¿porqué dices que debe salir 18.53, si un int no tiene decimales?  :o
Título: Re: Division en coma flotante erronea!?!? (C30)
Publicado por: blackcat en 22 de Abril de 2008, 01:14:45
Hola

Unas preguntas...

¿Qué tipo de variable es Enc_Pultsu_Kop?
Si le pides un casting de unsigned int, ¿porqué dices que debe salir 18.53, si un int no tiene decimales?  :o

ESO ESO ESO ESO !!! 

Y como sabes que sale 18.53???  Que warnings obtienes en la compilación ???
Título: Re: Division en coma flotante erronea!?!? (C30)
Publicado por: manex_1987 en 22 de Abril de 2008, 04:00:50
Nop.

Enc_Pultsu_Kop es un INT.

He probado a debuggear ((float)ZENBAT/(float)PHI_ENC), y sale 18.53 , que casteando unsigned int, va a ser 18.

En cambio ((float)ZENBAT)/((float)PHI_ENC) si que da el valor correcto, que casteado va a ser 26
Título: Re: Division en coma flotante erronea!?!? (C30)
Publicado por: migsantiago en 22 de Abril de 2008, 11:25:56
Pues hay una diferencia entre ambos códigos, pero los dos deben entregar el mismo resultado, 26.706.

Yo creo que es un bug. Hice pruebas con la calculadora y con el convertidor de ccs de float a entero y no encontré la conexión  :?