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 .