strictfp

This may avoid round-off errors, overflows and underflows that would otherwise occur, but can cause programs to produce different output on such architectures.

Although it was easy to control calculation precision, limiting the exponent range for intermediate results required additional costly instructions.

Starting with JVM 1.2, intermediate computations were, by default, allowed to exceed the standard exponent ranges associated with IEEE 32-bit and 64 bit formats.

Since x87 floating point is no longer necessary on x86 processors supporting SSE2, Java 17 again made all floating-point operations strict, effectively restoring the pre-1.2 semantics.

[4] Programmers can use the modifier strictfp to ensure that calculations are performed as in the earlier versions; that is, only with IEEE single and double precision types used.