Каково использование модификатора не доступа StrictFP?

StackOverflow https://stackoverflow.com/questions/2014844

  •  19-09-2019
  •  | 
  •  

Вопрос

Я знаю, что это дублированный вопрос. Но я хочу знать это с примером. Так может ли кто -нибудь объяснить это примером?

Ссылка на дубликат сообщения: Когда мне следует использовать ключевое слово «strictfp» в Java?

Это было полезно?

Решение

Ну, ответ Грини прекрасно подводит ими, но если вы ищете пример ..

Допустим, вы сделали игру, которая допускает выставки Highscore, но только после того, как сервер проверяет счет. Одним из методов подтверждения оценки является то, чтобы клиент отправил на сервер клиент отправить ключи (и их временные метки). В идеале сервер будет проходить через ту же игру и получить одинаковую оценку.

Теперь, допустим, в вашей игре есть физика, которая может изменить результат игры (например, взрыв, бросающий случайный мусор, который может повредить вам, если он попадет).

Физика этой игры потенциально может отличаться на сервере (даже если она немного), чем клиент (например, при преобразовании в целые числа для обнаружения столкновений, она была округлена вниз вместо вверх) В таком случае, у вас может быть ситуация, когда игра клиента была нет поразил мусор от взрыва, но серверная игра был - И теперь у вас есть разница в оценке, которая может неправильно аннулировать подчинение высокого уровня

Пока strictfp Это, конечно, не серебряная пуля, она имеет большое значение в том, чтобы навязывать некоторую последовательность «воспроизведения» инструкций на разных платформах.

Другие советы

Это то, что Java Language Spec говорит:

В рамках выражения FP-строги все промежуточные значения должны быть элементами установленного значения поплавкового или двойного значения, что подразумевает, что результаты всех выражений FP-строги должны быть предсказанными по арифметике IEEE 754 на операндах, представленных с использованием отдельных и двойных форматов Анкет В рамках выражения, которое не является FP-Strict, для реализации предоставляется некоторая свобода свободы для использования расширенного диапазона экспонентов для представления промежуточных результатов; Чистый эффект, грубо говоря, заключается в том, что расчет может дать «правильный ответ» в ситуациях, когда исключительное использование набора значений плавания или набора двойных значений может привести к переполнению или нижнему потоку.

Это означает: арифметика с плавающей запятой (т.е. расчеты с участием float а также double типы) в Java указан, чтобы придерживаться IEEE 754 Стандарт, который говорит, как именно представлять числа FP. Проблема заключается в том, что современные процессоры внутренне используют арифметику FP, которая не придерживается этого стандарта для промежуточных результатов - это, как правило, не проблема, потому что она на самом деле и более быстрее и дает более точные результаты. Но это может означать, что программа дает немного разные результаты в зависимости от того, на каком оборудовании она работает, что противоречит основному обещанию независимости от платформы Java.

А strictfp Ключевое слово позволяет вам убедиться, что это обещание будет выполнено, и программа будет иметь точно такой же результат, где бы оно ни было, - но это происходит по цене более низкой производительности на аппаратном обеспечении, где необходимо потратить дополнительные усилия, чтобы вычисления FP были IEEE 754 на всех промежуточных результатах.

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

strictfp это особенный.

Давайте посмотрим с Пример космического агентства.

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

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

Главный момент заключается в том, что когда данные отправляются для оценки, чтобы отслеживать корабль, он должен вернуть значение, которое одинаково для другой платформы Иначе мы получим данные, которые немного отличаются по десятичному значению.

Но это не считается как небольшая разница, так как это приведет к тому, что корабль отвлекает от его траектории, помните о давнем исчислении, каждая небольшая точка проходит траекторию, поэтому наша Расчет должен быть очень специфическим и последовательным для даже другой платформы, он должен иметь стандартов и точность.

Для этого требования у нас есть StrictFP в Java.

Вы хотите, чтобы программа продемонстрировала это, Трудно показать это точно с помощью небольшой программы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top