Leí el JVM specification for the fpstrict
modifier pero todavía no entiendo completamente lo que significa.¿Qué hace fpstrict en Java?
¿Alguien puede aclararme?
Leí el JVM specification for the fpstrict
modifier pero todavía no entiendo completamente lo que significa.¿Qué hace fpstrict en Java?
¿Alguien puede aclararme?
Básicamente, exige que los cálculos que involucren las variables afectadas float
y double
tengan que seguir al pie de la letra la especificación IEEE 754, incluidos los resultados intermedios.
Esto tiene el efecto de:
Editar: Más específicamente, muchas CPU modernas usan aritmética de coma flotante de 80 bits ("extended precision") internamente. Por lo tanto, pueden representar internamente algunos números en forma desnormalizada que causarían desbordamiento aritmético o subdesbordamiento (produciendo Infinito o cero, respectivamente) en flotadores de 32 o 64 bits; en casos límite, 80 bit solo permite retener más precisión. Cuando dichos números ocurren como resultados intermedios en un cálculo, pero con un resultado final dentro del rango de números que pueden representarse mediante flotantes de 32/64 bits, se obtiene un resultado "más correcto" en máquinas que usan aritmética de flotación de 80 bits que en máquinas que no lo haga, o en el código que usa strictfp
.
Gracias Michael. ¿En qué casos podría diferir un cálculo de coma flotante de la especificación IEEE754? –
me gusta esta respuesta, que llega al punto:
Asegura que sus cálculos son igualmente erróneo en todas las plataformas.
que responden ??? – bluish
strictfp
es una palabra clave y se puede utilizar para modificar una clase o un método, pero nunca una variable . Marcar una clase como strictfp significa que cualquier código de método en la clase será conforme a las reglas estándar IEEE 754 para los puntos flotantes. Sin ese modificador, los puntos flotantes utilizados en los métodos podrían comportarse de una manera dependiente de la plataforma.
Si no declara una clase como strictfp, aún puede obtener el comportamiento strictfp en un método método por método, al declarar un método como strictfp.
Si no conoce el estándar IEEE 754, este no es el momento de aprenderlo. Tienes, como decimos, peces más grandes para freír.
Probablemente sea útil que la palabra clave correspondiente de Java sea 'strictfp' y ** not **' fpstrict', como se podría suponer. –
Punto válido @Joachim –