Tengo un código que se comporta de manera diferente bajo Mac OSX y Linux (Ubuntu, Fedora, ...). Esto se refiere a la conversión de tipos en operaciones aritméticas dentro de instrucciones printf. El código está compilado con gcc/g ++.Mecanografía con declaraciones printf bajo Mac OSX y Linux
La siguiente
#include <stdio.h>
int main() {
float days = (float) (153*86400)/86400.0;
printf ("%f\n", days);
float foo = days/30.6;
printf ("%d\n", (int) foo);
printf ("%d\n", (int) (days/30.6));
return 0;
}
genera en Linux
153.000000
5
4
y en Mac OS X
153.000000
5
5
¿Por qué?
Para mi sorpresa esto aquí funciona tanto en Mac OS X y Linux
printf ("%d\n", (int) (((float)(153 * 86400)/86400.0)/30.6));
printf ("%d\n", (int) (153/30.6));
printf ("%.16f\n", (153/30.6));
¿Por qué? No tengo ni idea. GRACIAS.
realmente no es una respuesta, pero ¿por qué hacer esto:' días flotantes = (flotante) (153 * 86400)/86400.0; '? Eso debería ser igual a '153.0' ya que la multiplicación y la división se cancelan mutuamente. –
Inicialmente el código era algo así como "float days = (float) delta/86400.0;" Quería simular el error que aparece con 153 días (o los segundos correspondientes). Como el código funciona durante 152 días. Podría haber ingresado 13219200 en vez de 153 * 86400, por supuesto. –
No lo veo ahora mismo. ¿Estás usando las mismas o diferentes versiones de gcc en los dos entornos? También los mismos o diferentes procesadores? ¿64 bit o 32 bit? – dmckee