2010-03-24 10 views

Respuesta

11

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:

  • Asegurar que la misma entrada generará siempre exactamente el mismo resultado en todos los sistemas
  • La CPU puede tener que hacer algún trabajo extra, por lo que es un poco más lento
  • Los resultados serán, en algunos casos, menos precisos (y mucho menos, en casos extremos)

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.

+0

Gracias Michael. ¿En qué casos podría diferir un cálculo de coma flotante de la especificación IEEE754? –

6

me gusta esta respuesta, que llega al punto:

Asegura que sus cálculos son igualmente erróneo en todas las plataformas.

+0

que responden ??? – bluish

2

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.