jueves, agosto 30, 2007

Operaciones aritméticas y strictfp

jueves, agosto 30, 2007 por Martín

Una de las palabras reservadas en Java que seguramente sólo verás cuando te estás leyendo un libro básico sobre Java es strictfp. La lees, y te olvidas. Nadie te va a pedir que la utilices mientras estudias y probablemente nunca te la encuentres en el trabajo.

Sin embargo hay ocasiones en las que te encuentras que dos operaciones aritméticas no dan el mismo resultado de repente en JRockit sobre Sun Solaris que en la VM de Sun sobre Windows. mmm ¿qué diablos pasa?

Básicamente, hasta Java 1.2 las operaciones en coma flotante eran predecibles. Todas se realizaban siguiendo el estándar definido por el IEEE y los resultados eran los mismos bajo cualquier implementación de Java, bajo cualquier plataforma, y compatibles con los resultados de cualquier otro lenguaje que siguiese el estándar definido por el IEEE.

La contrapartida a esto era que las operaciones de coma flotante eran muy lentas, ya que se deben forzar una serie de restricciones por ejemplo en cuanto a overflows, y Java no era competitivo. Así que se decidió dejar de forzar la compatibilidad con IEEE para conseguir un aumento de rendimiento, dejando como opcional la compatibilidad. Para forzar que las operaciones sean compatibles con el estándar IEEE se tiene que utilizar la palabra reservada strictfp. En este enlace lo explican muy bien.

comments

1 Respuestas a "Operaciones aritméticas y strictfp"
cafpmx dijo...
7:45

Excelente, muy breve, pero lo suficiente como para tener un idea, y saber por donde investigar.