La palabra clave estrictafp en Java

1. Introducción

De forma predeterminada, los cálculos de punto flotante en Java dependen de la plataforma. Y así, la precisión del resultado de punto flotante depende del hardware en uso.

En este tutorial, aprenderemos cómo usar estrictofp en Java para garantizar cálculos de punto flotante independientes de la plataforma.

2. Uso de rigidfp

Podemos usar la palabra clave estrictafp como un modificador de no acceso para clases, métodos no abstractos o interfaces:

public strictfp class ScientificCalculator { ... public double sum(double value1, double value2) { return value1 + value2; } public double diff(double value1, double value2) { return value1 - value2; } } public strictfp void calculateMarksPercentage() { ... } public strictfp interface Circle { double computeArea(double radius); }

Cuando declaramos una interfaz o una clase con estrictofp, todos sus métodos miembros y otros tipos anidados heredan sucomportamiento.

Sin embargo, tenga en cuenta que no se nos permite usar la palabra clave estrictafp en variables, constructores o métodos abstractos.

Además, para los casos en que tengamos una superclase marcada con él, no hará que nuestra subclase herede ese comportamiento.

3. ¿Cuándo usarlo?

La palabra clave estrictafp de Java es útil siempre que nos preocupemos mucho por el comportamiento determinista de todos los cálculos de punto flotante:

@Test public void whenMethodOfstrictfpClassInvoked_thenIdenticalResultOnAllPlatforms() { ScientificCalculator calculator = new ScientificCalculator(); double result = calculator.sum(23e10, 98e17); assertThat(result, is(9.800000230000001E18)); result = calculator.diff(Double.MAX_VALUE, 1.56); assertThat(result, is(1.7976931348623157E308)); }

Dado que la clase ScientificCalculator utiliza esta palabra clave, el caso de prueba anterior pasará a todas las plataformas de hardware. Tenga en cuenta que si no lo usamos, JVM puede usar cualquier precisión adicional disponible en el hardware de la plataforma de destino.

Un caso de uso popular en el mundo real es un sistema que realiza cálculos medicinales altamente sensibles.

4. Conclusión

En este tutorial rápido, hablamos sobre cuándo y cómo usar la palabra clave estrictafp en Java.

Como de costumbre, todos los ejemplos de código presentados están disponibles en GitHub.