Ключовата дума strictfp в Java

1. Въведение

По подразбиране изчисленията с плаваща запетая в Java зависят от платформата. И така, точността на резултата с плаваща запетая зависи от използвания хардуер.

В този урок ще научим как да използваме strictfp в Java, за да осигурим независими от платформата изчисления с плаваща запетая.

2. Използване на strictfp

Можем да използваме ключовата дума strictfp като модификатор без достъп за класове, абстрактни методи или интерфейси:

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

Когато декларираме интерфейс или клас със strictfp, всички негови методи-членове и други вложени типове го наследяватповедение.

Моля, имайте предвид, че не ни е позволено да използваме ключова дума strictfp за променливи, конструктори или абстрактни методи.

Освен това, за случаите, когато имаме суперклас, маркиран с него, това няма да накара нашия подклас да наследява това поведение.

3. Кога да се използва?

Ключовата дума Java strictfp е полезна винаги, когато много ни интересува детерминираното поведение на всички изчисления с плаваща запетая:

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

Тъй като класът ScientificCalculator използва тази ключова дума, горният тестов случай ще премине на всички хардуерни платформи. Моля, обърнете внимание, че ако не го използваме, JVM е свободен да използва всякаква допълнителна точност, налична на хардуера на целевата платформа.

Популярният случай на употреба в реалния свят е система, която извършва високочувствителни медицински изчисления.

4. Заключение

В този бърз урок говорихме за това кога и как да използваме ключовата дума strictfp в Java.

Както обикновено, всички представени примерни кодове са достъпни в GitHub.