Nøgleordet strictfp i Java

1. Introduktion

Som standard er beregningerne med flydende punkt i Java platformafhængige. Og så afhænger resultatet af flydende punkt af den hardware, der er i brug.

I denne vejledning lærer vi, hvordan man gør det brug strengfp i Java for at sikre platformuafhængige floating-point-beregninger.

2. strengfp Anvendelse

Vi kan bruge strengfp nøgleord som en ikke-adgangsmodifikator til klasser, ikke-abstrakte metoder eller grænseflader:

offentlig strictfp klasse ScientificCalculator {... offentlig dobbelt sum (dobbelt værdi1, dobbelt værdi2) {returværdi1 + værdi2; } offentlig dobbelt diff (dobbelt værdi1, dobbelt værdi2) {returværdi1 - værdi2; }} offentlig strengfp ugyldig beregneMærkerPercentage () {...} offentlig strengfp-grænseflade Cirkel {dobbelt beregningsareal (dobbelt radius); }

Når vi erklærer en grænseflade eller en klasse med strictfp, alle dets medlemsmetoder og andre indlejrede typer arver densopførsel.

Dog venligst bemærk, at vi ikke har lov til at bruge strengfp nøgleord på variabler, konstruktører eller abstrakte metoder.

Derudover i tilfælde, hvor vi har en superklasse markeret med det, får det ikke vores underklasse til at arve den adfærd.

3. Hvornår skal jeg bruge?

Java strengfp nøgleord er praktisk, når vi holder meget af den deterministiske opførsel af alle flydende-beregninger:

@Test offentlig ugyldigt nårMethodOfstrictfpClassInvoked_thenIdenticalResultOnAllPlatforms () {ScientificCalculator calculator = new ScientificCalculator (); dobbelt resultat = calculator.sum (23e10, 98e17); assertThat (resultat, er (9.800000230000001E18)); resultat = calculator.diff (Double.MAX_VALUE, 1.56); assertThat (resultatet er (1.7976931348623157E308)); }

Siden den ScientificCalculator klasse bruger dette nøgleord, vil ovenstående test case videregive alle hardware platforme. Bemærk, at hvis vi ikke bruger det, er JVM fri til at bruge enhver ekstra præcision tilgængelig på målplatformens hardware.

En populær anvendelse i den virkelige verden for det er et system, der udfører meget følsomme lægemiddelberegninger.

4. Konklusion

I denne hurtige vejledning talte vi om, hvornår og hvordan man bruger strengfp nøgleord i Java.

Som normalt er alle de præsenterede kodeeksempler tilgængelige på GitHub.