Todo comenzó con una historia,
Cuando java estaba siendo desarrollado por James Gosling, Herbert y resto de su equipo. Tenían esta cosa loca en mente llamada independiente de la plataforma. Querían hacer oak (Java) tanto mejor que funcionaría exactamente igual en cualquier máquina que tenga un conjunto de instrucciones diferente, incluso ejecutando diferentes sistemas operativos. Pero, hubo un problema con los números de punto decimal también conocido como punto flotante y doble en los lenguajes de programación. Algunas máquinas se construyeron teniendo como objetivo la eficiencia mientras que el resto se enfocaba en la precisión. Entonces, las máquinas posteriores (más precisas) tenían un tamaño de punto flotante de 80 bits, mientras que las máquinas anteriores (más eficientes/más rápidas) tenían dobles de 64 bits. Pero, esto fue en contra de la idea central de construir un lenguaje independiente de plataforma.Además, esto puede conducir a la pérdida de precisión/datos cuando se crea un código en una máquina (que tiene el doble del tamaño de 64 bits) y se ejecuta en otro tipo de máquina (que tiene el doble de tamaño de 80 bits).
Se puede tolerar el cambio de tamaño, pero no se puede reducir el tamaño. Entonces, encontraron un concepto de strictfp, es decir, estricto punto flotante. Si usa esta palabra clave con una clase/función, su coma flotante y sus dobles tienen un tamaño constante en cualquier máquina. es decir, 32/64 bits, respectivamente.
Siempre, a menos que realmente necesite el rendimiento más de lo que necesita reproducibilidad. – Antimony
@Antimonio - o la precisión/corrección. x86/x64, por ejemplo, usa registros de coma flotante de 80 bits internamente, por lo que el resultado será más preciso para un cálculo largo sin strictfp. –
@Robert En realidad, la especificación garantiza la precisión limitada de la mantisa. La única diferencia es que puede usar una precisión de exponente mayor que la normal, que tiene diferencias en casos excepcionales debido al doble redondeo. – Antimony