Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/03/2012, 12:10
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 7 meses
Puntos: 73
Respuesta: duda funcion pow(x,y)

Es solamente un problema de redondeo interno, que puede verse agravado al tratarse de microcontroladores. En algunos microcontroladores, los tipos de coma flotante tienen menos precisión.

Para que veas lo que te quiero decir, en tu programa prueba esto: Una vez que haces

y = (float)(x - (unsigned int)x); // almacena parte decimal

imprime el valor de y, y el de y multiplicado por 1000, con (por ejemplo) 20 cifras decimales:

printf("%1.20f\n", y);
printf("%1.20f\n", y*1000.0);

A mí me sale:

0.43999958038330100000 (en lugar de 0.44)
439.99957275390630000000 (en lugar de 440)

Para forzar a que te haga el redondeo correctamente, utiliza esto:

fracpart=(unsigned int)(pow(10,3)*y + 0.5); // punto decimal 3 digitos a la derecha

Si vas a tener números negativos, cambia los tipos unsigned int por int, y en la línea anterior deberás quitar 0.5 en lugar de sumarlo cuando el número sea negativo.

Saludos,