Autor Tema: Division en coma flotante erronea!?!? (C30)  (Leído 3086 veces)

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

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Division en coma flotante erronea!?!? (C30)
« 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!

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Re: Division en coma flotante erronea!?!? (C30)
« Respuesta #1 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!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Division en coma flotante erronea!?!? (C30)
« Respuesta #2 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

Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: Division en coma flotante erronea!?!? (C30)
« Respuesta #3 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 ???
Control Automático, DSP & Microcontroladores

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Re: Division en coma flotante erronea!?!? (C30)
« Respuesta #4 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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Division en coma flotante erronea!?!? (C30)
« Respuesta #5 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  :?


 

anything