Strictfp java что это
Перейти к содержимому

Strictfp java что это

  • автор:

strictfp

strictfp является относительно новым ключевым словом. Когда была выпущена Java 2, модель вычислений с плавающей точкой была слегка упрощена. В частности, новая модель не требовала округления некоторых промежуточных результатов вычислений. В ряде случаев это предотвращает переполнение. Модифицируя класс или метод словом strictfp, вы гарантируете, что вычисления с плавающей точкой будут выполняться точно так, как они выполнялись в ранних версиях Java. Когда класс модифицирован словом strictfp, все его методы автоматически модифицируются strictfp.

Например, следующий фрагмент сообщает Java, что нужно использовать исходную модель вычислений с плавающей точкой при вычислении всех методов, определенных в классе MyClass:

strictfp class MyClass //.

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

Software Development

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

Приложение A. Ключевые слова Java

Следующие 51 ключевое слово являются зарезервированными для использования в языке Java:

_ do instanceof strictfp*
abstract double int super
assert else interface switch
boolean enum long synchronized
break extends native this
byte final new throw
case finally package throws
catch float private transient
char for protected try
class goto public void
const if return volatile
continue implements short while
default import static

Ключевое слово _ (символ нижнего подчёркивания) – является ключевым словом начиная с Java 9.

Ключевые слова goto и const являются зарезервированными словами C++, но в настоящее время не используются в Java. Это даёт возможность компиляторам Java идентифицировать их и создавать улучшенные сообщения об ошибках, если они появляются в Java программах.

Буквальные значения true, false и null не являются ключевыми словами, это буквальные значения, как например 100. Тем не менее, вы не можете использовать их в качестве идентификаторов, точно также, как вы не можете использовать 100 в качестве идентификатора.

*Ключевое слово strictfp – это модификатор метода или класса, который позволяет им использовать точные вычисления с плавающей точкой. Арифметика с плавающей точкой может выполняться в одном из двух режимов: strict и nonstrict. Режим strict гарантирует, что результат вычисления будет одинаковым во всех реализациях виртуальной машины Java. Режим nonstrict позволяет сохранять промежуточные результаты вычислений в расширенном формате, отличном от стандартного формата чисел с плавающей запятой IEEE. Расширенный формат зависит от машины и позволяет быстрее выполнять код. Однако, когда вы выполняете код с использованием nonstrict режима на разных JVM, вы не всегда можете получить точно такие же результаты. По умолчанию для вычислений с плавающей запятой используется nonstrict режим. Чтобы использовать strict режим в методе или классе, добавьте ключевое слово strictfp в объявление метода или класса. С плавающей запятой strict может дать вам немного лучшую точность, чем nonstrict с плавающей запятой, но различие затронет только некоторые приложения. Точность не наследуется; то есть наличие strictfp в объявлении класса или интерфейса не приводит к тому, что расширенные классы или интерфейсы будут strict.

Модификатор strictfp

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

Отслеживать

22k 3 3 золотых знака 27 27 серебряных знаков 37 37 бронзовых знаков

задан 21 янв 2017 в 23:16

2,015 4 4 золотых знака 27 27 серебряных знаков 54 54 бронзовых знака

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

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 Если эти числа сравнивать с точность до сотых, то они будут одинаковы. Пример, как точность влияет на вычисления. Его можно не использовать т.к. почти все компиляторы современные уже его за нас подставляют (где-то читал такое в мануале) Дополнил.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *