La parola chiave strictfp in Java

1. Introduzione

Per impostazione predefinita, i calcoli in virgola mobile in Java dipendono dalla piattaforma. Quindi, la precisione del risultato in virgola mobile dipende dall'hardware in uso.

In questo tutorial impareremo come utilizzare strictfp in Java per garantire calcoli in virgola mobile indipendenti dalla piattaforma.

2. Utilizzo strictfp

Possiamo usare la parola chiave strictfp come modificatore di non accesso per classi, metodi o interfacce non astratte:

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); }

Quando dichiariamo un'interfaccia o una classe con strictfp, tutti i suoi metodi membri e altri tipi annidati ne ereditanocomportamento.

Tuttavia, tieni presente che non siamo autorizzati a usare la parola chiave strictfp su variabili, costruttori o metodi astratti.

Inoltre, per i casi in cui abbiamo una superclasse contrassegnata con essa, la nostra sottoclasse non erediterà quel comportamento.

3. Quando usarlo?

La parola chiave Java strictfp è utile ogni volta che ci preoccupiamo molto del comportamento deterministico di tutti i calcoli in virgola mobile:

@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)); }

Poiché la classe ScientificCalculator utilizza questa parola chiave, il test case sopra verrà trasmesso su tutte le piattaforme hardware. Tieni presente che se non lo utilizziamo, JVM è libera di utilizzare qualsiasi precisione aggiuntiva disponibile sull'hardware della piattaforma di destinazione.

Un caso d'uso molto diffuso nel mondo reale è un sistema che esegue calcoli medicinali altamente sensibili.

4. Conclusione

In questo breve tutorial, abbiamo parlato di quando e come utilizzare la parola chiave strictfp in Java.

Come al solito, tutti gli esempi di codice presentati sono disponibili su GitHub.