Hoy ha estado el día muy extraño, un error de aritmética entera del procesador intel de mi laptop, no me dejaba en paz, hasta que por fin se me ocurrió compilar el mismo programa en otra maquina y ahí si me funciona. Me castra, me castra, ¡¿Como es posible que ni en la aritmética entera de un procesador podamos confiar?!
Eso no fue todo, Fatima me hizo la corrección y me sorprende tanto, es un código que a todas luces es equivalente al mio (o debería de ser para cualquier programador) y pues resulta que lo es en una maquina que no tenga procesador intel (o bueno al menos es mi conjetura).
El caso es que Pixie, solo lo acepta de una forma y que en Ometochtli (la maquina servidor en la que trabajamos), con un procesador AMD chorrocientas veces mas poderoso funciona a la perfección de ambas maneras).
Para no enojarme mas reduzco mi programa mas grande a un caso de prueba, para que vean de lo que hablo:
int factor = 1000; cout << "factor * 1.345 = " << (int)(factor * 1.345) << endl; cout << "factor * 2.344 = " << (int)(factor * 2.344) << endl; cout << "1000 * 1.345 = " << (int)(1000 * 1.345) << endl; cout << "1000 * 2.344 = " << (int)(1000 * 2.344) << endl;
La cosa es que las primeras lineas escriben:
factor * 1.345 = 1344
factor * 2.344 = 2343
Mientras que las segundas escriben:
1000 * 1.345 = 1345
1000 * 2.344 = 2344
Este error parece que solo esta presenta cuando los números en cuestión tienen en su parte decimal y 3 seguido de un cuatro. Es increíble pero si cambian el numero por 1.253, todo funciona perfectamente. Desde luego con cualquier caso en un procesador AMD parece que funciona bien.
!!!Es cierto!!! se que no me lo van a creer así que pongo el pantallazo, se que con todo y eso algunos no me van a creer. Pero ya no hay mas que pueda hacer.

Y eso no es lo mas triste del asunto, lo mas triste es la manera como lo corrigió Fatima:
double aux; aux = (double)(factor * 1.345); cout << "factor * 1.345 = " << (int)(aux) << endl;
¡¡¡Y así si funciona!!!, Aun cuando el código es equivalente al mio. Desde luego el programa que queremos hacer es mucho mas extenso que esto, pero no me deja de molestar, que cosas así pasen, me pone muy nervioso.
Ya para seguir en el tono pongo un poema que vi en mi clase de ingles, que escribió Lord Cromer, que seguro en su momento se sintió como yo ahora.
Our Queer Language
When the English tongue we speak,
Why is “break” not rhymed with “freak”?
Will you tell me why it’s true
We say “sew” but likewise “few”;And the maker of a verse
Cannot cap his “horse” with “worse”?
“Beard” sounds not the same as “heard”;
“Cord” is different from “word”;
Cow is “cow,” but low is “low”;
“Shoe” is never rhymed with “foe.”Think of “hose” and “dose” and “lose”;
“Doll” and “roll” and “home” and “some.”
And since “pay” is rhymed with “say,”
Why not “paid” with “said,” I pray?We have “blood” and “food” and “goo d”;
“Mould” is not pronounced as “could.”
Wherefore “done” but “gone” and “lone”?
Is there any reason known?
And, in short, it seems to me,
Sounds and letters disagree.
#1 by mag on 12 Marzo 2010 - 19:43 pm
Preguntale al Dr. Guapo
, de seguro él sabe
#2 by nemediano on 12 Marzo 2010 - 19:51 pm
Primero: No esta guapo.
en cuanto lo vea le preguntare ….
Segundo: Sufre de exceso de personalidad.
Tercero: ¿Por que querría ayudarme?
y Cuarto: Si, ya se, que no tengo otra opción de momento
#3 by Diego on 27 Marzo 2010 - 20:51 pm
¿Queee peeeedooo? 0_o
Esos errores creía que ya se habían desechado desde el Pentium 1 (¿cuál fué en donde se presentó un error así que fué descubierto por un matemático?).
#4 by Diego on 27 Marzo 2010 - 20:52 pm
Por cierto, ¡saludos!
#5 by nemediano on 7 Abril 2010 - 6:26 am
Gracias por la visita Diego. Ya investigando mas parece que el problema persiste y no he querido hacer nada del otro mundo mas que escribir aquí. También me parece que hay otros casos donde falla.
El error que mencionas fue descubierto en 1994 en los procesadores pentium (en ese entonces eran los primeros de la serie por lo que no era necesario referirte a ellos como pentium 1)
#6 by Víctor Mireles on 3 Junio 2010 - 5:52 am
Y qué pasa si lo imprimes sin el cast y con toda la precisión posible?
Será que el compilador te hace el paro cuando pones el 1000*1.345 y simplmente mueve el punto, en vez de hacer la operación de punto flotante?