21

Для чего нужен данный модификатор? И с чем его можно использовать?

post_zeew
  • 21,983
bsuart
  • 1,995

2 Answers2

21

strictfp - это модификатор, введенный в java 1.2, ограничивающий точность вычислений с float и double по стандарту IEEE. Для чего это нужно? Чтобы обеспечить переносимость. Дело в том, что JVM использует всю возможную точность процессора, а она на разных системах разная, поэтому и результат может получиться разный.Данный модификатор используется в программах требующих точность вычислений превышающих IEEE (обычно, что-нибудь связное с наукой).

strictfp class StrictFPClass {
    double num1 = 10e+102;
    double num2 = 6e+08;
    double calculate() {
        return num1 + num2;
    }
}

strictfp interface StrictFPInterface {
    double calculate();
    strictfp double compute();    // compile error
}

class StrictFPMethod {
    strictfp double computeTotal(double x, double y) {
        return x + y;
    }
}

В классе он обозначает, что все методы будут на всех системах возвращать вещественные числа с одинаковой точностью. 0.112 и 0.113 Если эти числа сравнивать с точность до сотых, то они будут одинаковы. Пример, как точность влияет на вычисления. Его можно не использовать т.к. почти все компиляторы современные уже его за нас подставляют (где-то читал такое в мануале) Дополнил.

Petya
  • 336
  • Модификатор может объявляется для переменных?возвращаемых значений методов? – bsuart Jan 21 '17 at 23:30
  • Что означает данный модификатор в объявлении класса? – bsuart Jan 21 '17 at 23:32
  • 4
    Сначала Вы говорите "ограничивающий точность", потом "требующих точность вычислений превышающих". Непонятно. – αλεχολυτ Jan 22 '17 at 06:01
10

Модификатор strictfp применяется к классам, интерфейсам и методам, и гарантирует соответствие всех операций на числах с плавающей точкой стандарту IEEE 754.

При использовании данного модификатора Вы получите одинаковое поведение в ходе манипуляций с числами с плавающей точкой на всех платформах.

Так же про FP-strict можно почитать в JLS.

post_zeew
  • 21,983
  • При объявлении к классу и интерфейсу что дает? – bsuart Jan 21 '17 at 23:45
  • 2
    @bsuart, Гарантию соответствия всех операций на числах с плавающей точкой стандарту IEEE 754 всех методов соответствующего класса/интерфейса. – post_zeew Jan 21 '17 at 23:50