Yo creo que el error viene de multiplicar dos números de carácter diferente: un entero y un real. En el caso de la modificación de tu amiga, está especificando que ambos son reales de tamaño doble.<div><br><div class="gmail_quote">

El 10 de marzo de 2010 20:08, Jorge García <span dir="ltr"><<a href="mailto:jorgeantonio49@gmail.com">jorgeantonio49@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hola!<br>
Antes que nada aclaro que esto no es un chiste de verdad me esta pasando<br>
y no se por que. :(<br>
<br>
Resulta que estaba haciendo un programa para ordenar puntos del espacio<br>
(bajo una relación de orden definida por mi) y pues se me ocurrió que<br>
debería implementar una clase envolvente para guardar puntos en 3D con<br>
coordenadas flotantes como enteros y que yo pudiera controlar la<br>
precisión.<br>
<br>
Termine la clase y estaba haciéndole pruebas cuando me dio ciertos<br>
resultados inesperados, después de revisar mi código, aun no entiendo<br>
por que. El programa es mas grande, pero lo he reducido a un caso de<br>
prueba lo mas simple que puedo.<br>
<br>
Aquí esta el código del error reducido<br>
====== main.c ==========<br>
#include <stdio.h><br>
<br>
int main (int arc, char* argv[]) {<br>
        int factor = 1000;<br>
<br>
        printf("factor * 1.345 = %d\n", (int)(factor * 1.345));<br>
        printf("factor * 1.245 = %d\n", (int)(factor * 1.245));<br>
<br>
        printf("1000 * 1.345 = %d\n", (int)(1000 * 1.345));<br>
        printf("1000 * 1.245 = %d\n", (int)(1000 * 1.245));<br>
<br>
        return 0;<br>
}<br>
=======================<br>
Lo feo del asunto es que las dos primeras lineas imprimen:<br>
factor * 1.345 = 1344<br>
factor * 1.245 = 1245<br>
Mientras que las dos segundas imprimen:<br>
1000 * 1.345 = 1345<br>
1000 * 1.245 = 1245<br>
Es decir en el primer caso, esta calculando un 1344 en vez de 1345.<br>
Le hecho un montón de pruebas y esto solo parece suceder cuando el<br>
numero en cuestión es x.34x, es decir cuando la primer posición decimal<br>
es 3 y la segunda 4. Y que el factor este en una variable, cuando uso la<br>
literal constante "1000", todo va bien.<br>
Originalmente estaba trabajando en C++, pero ya vi que el error persiste<br>
en C. Y lo peor del asunto es que hice el mismo programa en Java y ahí<br>
si funciona perfectamente.<br>
Al final decidí probar el fuente en otra maquina un servidor que<br>
tenemos, y tanto en C, como en C++, como en Java ¡¡funciona bien!!<br>
Luego compile en mi misma maquina pero en windows y ahí esta de nuevo el<br>
error. También compile en una portátil de una amiga y también esta<br>
presente el error. ¡¡¡Y no se por que!!!<br>
<br>
Ya para terminar mi queja, mi amiga modifico el código y parece ahora<br>
funcionar en todas las maquinas, pero a mi parecer su código y el mio<br>
deberían de ser equivalentes.<br>
<br>
==main2.c ====<br>
#include <stdio.h><br>
<br>
int main (int arc, char* argv[]) {<br>
        int factor = 1000;<br>
        double aux;<br>
<br>
        aux = (double)factor * (double)1.345;<br>
<br>
        printf("factor * 1.345 = %d\n", (int)aux);<br>
<br>
<br>
        return 0;<br>
}<br>
================<br>
Las maquinas que presentan el error.<br>
En mi maquina compile en gcc 4.2.4 bajo Ubuntu<br>
Y con mingw/3.4.2 bajo windows XP<br>
En la maquina de mi amiga gcc 4.2.1 bajo Fedora<br>
La que nunca presento el error:<br>
Servidor gcc 4.4.1 bajo Red Hat<br>
Mi pregunta es entonces: ¿De que creen que dependa?, y ¿Como ven ambos<br>
códigos?, deberían ser equivalentes, ¿no?.<br>
Gracias por leer, es que sigo tan en shock que tenia que decirle a mas<br>
gente.<br>
--<br>
Jorge Antonio Garcia Galicia<br>
<a href="http://www.nemediano.com.mx" target="_blank">http://www.nemediano.com.mx</a><br>
<br>
<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></div>