/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

problemas con punto flotante

 
      Índice del Foro elrincondelc.com -> Dev-C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
anakinc



Registrado: 03 Jul 2012
Mensajes: 3

MensajePublicado: 03/07/2012 9:30 am
Título: problemas con punto flotante

Hola,

estoy siguiendo el curso de C utilizando el compilador Dev-C++ y me e encontrado con un error y no se cual es su efecto.

utilizo el dev-c++4.9.9.2

este es el codigo:

#include <stdio.h>

int main()
{

float num=4060.80;
printf( "El valor de num es : %f", num );
getchar();
return 0;
}

tengo como resultado
El valor de num es : 4060.8000489

Saludos.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7517
Ubicación: Mexico

MensajePublicado: 03/07/2012 6:40 pm
Título:

Para imprimir el numero con solo dos dígitos después del punto decimal debes utilizar:
Código:
printf("El valor de num es : %.2f", num);


Una respuesta cortesía de Pantalàimon_ relacionada con el tema y con vínculos de interés se encuentra en la discusión iteracion punto fijo.

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
anakinc



Registrado: 03 Jul 2012
Mensajes: 3

MensajePublicado: 04/07/2012 6:20 am
Título:

Gracias por la respuesta pero no me resuelve la duda que tengo respecto al error que sucede. con el numero num ya que yo computo 4060.80 y se esta guardando en la memoria otro numero el 4060.800049. esto me preocupa ya que puede llevar a grandes errores.

en el algoritmo siguiente se puede apreciar como puede llegar a afectar esto donde un valor que debería ser 0 no lo es. (ver: n=num-4060.80 donde se definió num=4060.80 y n no es igual a 0)

#include <stdio.h>
int main()
{

float num=4060.80,n;
printf( "El valor de num es : %.2f\n", num );
n=num-4060.80;
n=n*10000;
printf( "este valor deberia ser cero : %.2f", n );
getchar();
return 0;
}

resultado:

El valor de num es :4060.80

este valor deberia ser cero :0.49


si alguien sabe por que es este error (es el compilador ?)y como solucionarlo seria de mucha ayuda gracias.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7517
Ubicación: Mexico

MensajePublicado: 04/07/2012 8:24 am
Título:

OK

El problema en el programa se debe al uso de distintos tipos: las variables "num" y "n" son de tipo "float" mientras que el valor 4060.80 es de tipo "double".

Para que el programa reporte el resultado esperado (cero) se debe cambiar este para que el tipo utilizado sea el mismo en variables y valores literales.

Un ejemplo cambiando las literales al tipo "float":
Código:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   float num = 4060.80F, n;
   printf( "El valor de num es: %f\n", num );
   
   n = num - 4060.80F;
   n = n * 10000;
   printf( "Este valor deberia ser cero: %f\n", n );
   
   return EXIT_SUCCESS;
}

Su salida es:
Código:
El valor de num es: 4060.800049
Este valor deberia ser cero: 0.000000


Cambiando todo al tipo "double":
Código:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   double num = 4060.80, n;
   printf( "El valor de num es: %f\n", num );
   
   n = num - 4060.80;
   n = n * 10000;
   printf( "Este valor deberia ser cero: %f\n", n );
   
   return EXIT_SUCCESS;
}

Su salida es:
Código:
El valor de num es: 4060.800000
Este valor deberia ser cero: 0.000000


Los números de punto flotante en C es un tema complicado, como ya te indique una explicación se encuentra en el mensaje de Pantalàimon_.

Paginas en ingles donde se explica el tema (ademas de Wikipedia) son:
Floating Point
Understanding and Using Floating Point Numbers

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
anakinc



Registrado: 03 Jul 2012
Mensajes: 3

MensajePublicado: 06/07/2012 7:07 am
Título:

gracias fueron de mucha ayuda tu respuesta y los link que dejaste para entender el problema.


PD: ya había posteado una respuesta pero al parecer no se genero.


Saludos
Volver arriba
      Índice del Foro elrincondelc.com -> Dev-C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com