<div dir="ltr">Hola Luis:<div><br></div><div style>Una regla a tener en cuenta es:</div><div style><br></div><div style>"No realizar nunca comparaciones de igualdad para números con decimales"</div><div style><br>
</div><div style>Ten en cuenta que cuando se almacena un número con decimales, el ordenador lo hace "como le hemos enseñado", en este caso lo hace siguiendo unas reglas que almacenan la parte decimal, el signo y el exponente, pero tanto la parte decimal como el exponente tienen límites. Además, no se almacena en base 10, sino en base 2 y por ello lo que tú crees que se está almacenando no es lo que realmente se almacena.</div>
<div style><br></div><div style>Por ejemplo el 4.8 se almacena como 4.7999999999999990e000</div><div style><br></div><div style>Por esto, en los programas, nunca debemos realizar comparaciones de igualdad con números del tipo float y double.</div>
<div style><br></div><div style>Si quieres puedes realizar comparaciones aproximadas de forma que abs(x-y) < epsilon</div><div style><br></div><div style>Saludos</div><div style>José Luis</div><div style><br></div><div style>
<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 16 de junio de 2013 23:00, Luis Gutierrez Gomez <span dir="ltr"><<a href="mailto:gutierrezgl@hotmail.com" target="_blank">gutierrezgl@hotmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div><div dir="ltr">Buenas Tardes:<br><br>Haciendo algunas practicas de programacion en C++, me topé con un problema que es el siguiente:<br>En esta porcion del programa que hago<br><br>double numero1, numero2, numero3, numero4;<br>
bool resp;<br><br>numero1 = 9.8;<br>numero2 = 4.8;<br>numero3 = 10.5;<br>numero4 = 5.5;<br><br>resp = ((numero1 - numero2) == (numero3 - numero4)) ? 1 : 0;<br><br>return (resp);<br><br>¿Porque me da como resultado resp = 0 , si como se ve, los resultados de las diferencias<br>
son 5 en ambos casos? Deberia dar 1.<br>Estuve tratando de entenderlo, me parece que estaria relacionado con los digitos menos significativos del double que no aparecen, si es así, como podria hacer para evitar esta complicación?<br>
<br>Intenté tambien hacerlo de esta manera, pero da lo mismo:<br><br>doble booster1, booster2;<br><br>booster1 = numero1 - numero2;<br>booster2 = numero3 - numero4;<br><br>resp = (booster1 == booster2) ? 1:0;<br><br>return (resp);<br>
<br>Muchas gracias<br><br>Luis G.<br><br>                                           </div></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>José Luis Torre</div>

<div><a href="http://ww.ehu.es/" target="_blank">ww.ehu.es</a></div>
<div> </div>
</div>