elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:42  


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  C++ no sabe sumar... ayuda plis
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: C++ no sabe sumar... ayuda plis  (Leído 814 veces)
TheMaker


Desconectado Desconectado

Mensajes: 513



Ver Perfil
C++ no sabe sumar... ayuda plis
« en: 14 Noviembre 2008, 18:04 »

Mirad, este es el codigo problematico

Código
for(float i=0.0;i<1;i+=0.01)
cout<<i<<endl;
 

fácil de entender lo que quiero no?? quiero mostrar por pantala la serie: 0.0, 0.1, 0.2... y así hasta 1

cual es mi sorpresa cuando veo q no suma del todo bien.. empieza correctamente pero llega u momento q no suma exactamente 0.1 sino q suma cifras proximas, mirad esto me muestra por pantalla:

0
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.1
0.11
 ....
....

ok hasta aqui todo bien... pero cuando llega a un determinado valor mirad :

0.82
0.83
0.839999
0.849999
0.859999
0.869999
0.879999
0.889999
0.899999
0.909999
0.919999
0.929999

a 0.83 en vez de sumarle 0.1 le suma 0.09999 q es muy similar pero no es exactamente lo mismo, pues bien el programa q estoy programando necesita una exactitud perfecta xq sino me salen resultados no validos.

Puede parecer poco el error, pero si le pido que llegue hasta 100 en vez de uno el error se va acomulando ...

por ejemplo cuando va por 7 ya va

7.84008
7.85008
7.86009
7.87009
7.88009

Parece poco pero a mi me jode mucho de cara al resultado final (estoy intentando calcular el campo electromagnetico generado por un hilo cargado homogeneamente) y esas pequeñas desviaciones producen q el programa calcule valores diferente cada vez q se ejecuta.


En línea

Gibe money please or I report you
GroK


Desconectado Desconectado

Mensajes: 680


...I have become comfortably numb...


Ver Perfil
Re: C++ no sabe sumar... ayuda plis
« Respuesta #1 en: 14 Noviembre 2008, 19:14 »

El problema viene dado por la falta de precision del tipo float. Utiliza double en su lugar y veras como no falla.

Saludos


En línea

"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant

Anibal784


Desconectado Desconectado

Mensajes: 762

Yo no la vote, pero me la tengo que aguantar igual


Ver Perfil WWW
Re: C++ no sabe sumar... ayuda plis
« Respuesta #2 en: 14 Noviembre 2008, 19:25 »

   Si como dice GroK es por la falta de presición del tipo float, a eso teneś que sumarle que cuando vos estás haciendo:
Código:
float i = 0.01
//En realidad hacés es
float j = (float)0.01 // 0.01 es double y lo que hace el compilador es un cast
                           // por eso se pierde presición, lo que podés hacer es
float k = 0.01f  // la f al final obliga al compilador a que sea float

// o bien
double l = 0.01
En línea

El que llega sin que lo llamen, se va sin que lo echen.

Citar
Vos no la votaste por eso la tenes adentro.
Lo fino no es lo tuyo, y a mi me chupa un huevo, soy argentino y no peronista, y eso es lo que realmente te molesta.
TheMaker


Desconectado Desconectado

Mensajes: 513



Ver Perfil
Re: C++ no sabe sumar... ayuda plis
« Respuesta #3 en: 14 Noviembre 2008, 19:59 »

Muchas gracias, no pienso volver a usar float en mi vida :S . He estado toda la tarde rayadisimo por esa tontería...
En línea

Gibe money please or I report you
APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.781


Toys in the attic.


Ver Perfil
Re: C++ no sabe sumar... ayuda plis
« Respuesta #4 en: 15 Noviembre 2008, 01:23 »

Deberían hacerlo obsoleto el float, osea, que importa que en vez de ocupar 4 bytes ocupe 8, no?
En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
>FedeX<

Desconectado Desconectado

Mensajes: 151



Ver Perfil WWW
Re: C++ no sabe sumar... ayuda plis
« Respuesta #5 en: 15 Noviembre 2008, 01:55 »

Es una desgracia que haya un coprocesador (la FPU) para esto...
En línea
TheMaker


Desconectado Desconectado

Mensajes: 513



Ver Perfil
Re: C++ no sabe sumar... ayuda plis
« Respuesta #6 en: 15 Noviembre 2008, 13:23 »

Es una desgracia que haya un coprocesador (la FPU) para esto...

No te entiendo, que quieres dar a entender?
En línea

Gibe money please or I report you
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines