| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
anakinc
Registrado: 03 Jul 2012 Mensajes: 3
| Publicado: 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: 7516 Ubicación: Mexico
| Publicado: 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
| Publicado: 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: 7516 Ubicación: Mexico
| Publicado: 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
| Publicado: 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 | |
 |
|
|