Het strictfp-sleutelwoord in Java

1. Inleiding

Standaard zijn de drijvende-kommaberekeningen in Java platformafhankelijk. En dus hangt de precisie van de uitkomst met drijvende komma af van de gebruikte hardware.

In deze zelfstudie leren we hoe u dat moet doen gebruik strictfp in Java om platformonafhankelijke drijvende-kommaberekeningen te garanderen.

2. strictfp Gebruik

We kunnen de strictfp trefwoord als een niet-toegangsmodificator voor klassen, niet-abstracte methoden of interfaces:

openbare strictfp-klasse ScientificCalculator {... openbare dubbele som (dubbele waarde1, dubbele waarde2) {retourwaarde1 + waarde2; } openbare dubbele diff (dubbele waarde1, dubbele waarde2) {retourwaarde1 - waarde2; }} openbare strictfp void berekenMarksPercentage () {...} openbare strictfp interface Cirkel {dubbele computeArea (dubbele straal); }

Wanneer we een interface of een klasse declareren met strictfp, al zijn lidmethoden en andere geneste typen erven zijngedrag.

Maar alsjeblieft merk op dat we niet mogen gebruiken strictfp trefwoord op variabelen, constructeurs of abstracte methoden.

Bovendien, voor gevallen waarin we een superklasse hebben die ermee is gemarkeerd, zal onze subklasse dat gedrag niet erven.

3. Wanneer te gebruiken?

Java strictfp trefwoord is handig wanneer we veel geven om het deterministische gedrag van alle drijvende-kommaberekeningen:

@Test openbare leegte whenMethodOfstrictfpClassInvoked_thenIdenticalResultOnAllPlatforms () {ScientificCalculator calculator = nieuwe ScientificCalculator (); dubbel resultaat = calculator.sum (23e10, 98e17); assertThat (resultaat, is (9.800000230000001E18)); resultaat = calculator.diff (Double.MAX_VALUE, 1.56); assertThat (resultaat, is (1.7976931348623157E308)); }

Sinds de Wetenschappelijke rekenmachine class maakt gebruik van dit sleutelwoord, de bovenstaande testcase zal doorgaan op alle hardwareplatforms. Houd er rekening mee dat als we het niet gebruiken, is het JVM vrij om elke extra precisie te gebruiken die beschikbaar is op de hardware van het doelplatform.

Een populaire use-case in de praktijk is een systeem dat zeer gevoelige medicinale berekeningen uitvoert.

4. Conclusie

In deze korte tutorial hebben we het gehad over wanneer en hoe je de strictfp trefwoord in Java.

Zoals gewoonlijk zijn alle gepresenteerde codevoorbeelden beschikbaar op GitHub.