Java has two kinds of floating-point environments:
* FP-strict (methods declared strictfp, etc.) where floating-point operational semantics are fully specified
* non FP-strict (the default) where some variation is allowed in the exponent range of expressions, but not in fields.
The non-strict environment accommodates certain peculiarities of performing 32-bit float and 64-bit double calculations on the 80-bit registers of the x87 stack. However, on many hardware processors strictfp is a no-op since all the floating-point operations run strictly. These contexts where strictfp is a no-op would include x86 SSE2 and later instruction set extensions.
When there is no difference in code generated between strictfp and non-strictfp contexts, there should not be a large performance penalty to declaring code strictfp.
* FP-strict (methods declared strictfp, etc.) where floating-point operational semantics are fully specified
* non FP-strict (the default) where some variation is allowed in the exponent range of expressions, but not in fields.
The non-strict environment accommodates certain peculiarities of performing 32-bit float and 64-bit double calculations on the 80-bit registers of the x87 stack. However, on many hardware processors strictfp is a no-op since all the floating-point operations run strictly. These contexts where strictfp is a no-op would include x86 SSE2 and later instruction set extensions.
When there is no difference in code generated between strictfp and non-strictfp contexts, there should not be a large performance penalty to declaring code strictfp.
- is blocked by
-
JDK-7175279 Don't use x87 FPU on x86-64
-
- Resolved
-
- relates to
-
JDK-8134795 Port fdlibm pow to Java
-
- Resolved
-
-
JDK-8175916 JEP 306: Restore Always-Strict Floating-Point Semantics
-
- Closed
-