Foros del Web » Programación para mayores de 30 ;) » C/C++ »

duda funcion pow(x,y)

Estas en el tema de duda funcion pow(x,y) en el foro de C/C++ en Foros del Web. hize este pequeño programa que separa el entero de un float, del decimal y el decimal lo vuelve entero con la funcion pow, el decimal ...
  #1 (permalink)  
Antiguo 29/02/2012, 20:33
 
Fecha de Ingreso: febrero-2012
Mensajes: 1
Antigüedad: 12 años, 2 meses
Puntos: 0
Pregunta duda funcion pow(x,y)

hize este pequeño programa que separa el entero de un float, del decimal y el decimal lo vuelve entero con la funcion pow, el decimal es y= .44 pero pow(10,3) regresa 439 en vez de 440, espero me puedan ayudar.

int main(int argc, char *argv[])
{
unsigned int z,fracpart;// z almacena la parte entera y fracpart son los decimales hechos enteros.
float y; // y almacena la parte decimal
float x=9.44;// numero a separar.
z=(unsigned int)x;// almacena parte entera de x
y=(float)(x- (unsigned int) x);// almacena parte decimal
fracpart=pow(10,3)*y;//mueve el punto decimal 3 digitos a la derecha
printf("el numero es:%f\nel entero es:%d\nel decimal es:%f\nel decimal hecho entero es:%d\n",x,z,y,fracpart );
system("PAUSE");
return 0;
}


esto lo hago porque en la programacion demicrocontroladores no existe sprintf() para pasar de float a string, lo anterior seria una parte de mi propia funcion, gracias.
  #2 (permalink)  
Antiguo 01/03/2012, 02:47
 
Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: duda funcion pow(x,y)

Cita:
Iniciado por kind2011 Ver Mensaje

int main(int argc, char *argv[])
{
unsigned int z,fracpart;// z almacena la parte entera y fracpart son los decimales hechos enteros.

...

printf("el numero es:%f\nel entero es:%d\nel decimal es:%f\nel decimal hecho entero
...
}
Estas declarando fracpart como unsigned int pero luego lo imprimes como float.
Prueba con eso
__________________
Si quieres conseguir resultados diferentes no hagas siempre lo mismo.

Mejora tu entorno. MestralCadiz con su comunidad.
  #3 (permalink)  
Antiguo 02/03/2012, 12:10
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 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,

Etiquetas: funcion, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:51.