문제

나는 이것이 중복 질문이라는 것을 알고 있습니다. 그러나 나는 그것을 모범으로 알고 싶다. 그렇다면 누구든지 예를 들어 설명 할 수 있습니까?

중복 게시물 링크 : Java에서 언제 "strictfp"키워드를 사용해야합니까?

도움이 되었습니까?

해결책

글쎄, Girinie의 대답은 그것을 멋지게 요약하지만, 당신이 예를 찾고 있다면 ..

하이 스코어 제출을 허용하는 게임을 만들었지 만 서버가 점수를 검증 한 후에야 만한다고 가정 해 봅시다. 점수를 검증하는 한 가지 방법 중 하나는 클라이언트가 키 프레스 (및 타임 스탬프)를 서버로 보내는 것입니다. 이상적으로 서버는 정확히 동일한 게임을 통해 동일한 점수를 얻습니다.

이제 게임의 결과를 바꿀 수있는 물리학이 있다고 가정 해 봅시다 (예 : 폭발이 무작위 파편을 던지는 폭발로 인해 피해를 입을 경우 해치면 해를 끼칠 수 있음).

해당 게임의 물리학은 클라이언트와 잠재적으로 서버에서 다를 수 있습니다 (예 : 충돌 감지를 위해 정수로 변환하면 반올림되었습니다. 아래에 대신에 위로). 그런 가장자리 케이스에서는 클라이언트 게임이 있었던 상황이있을 수 있습니다. ~ 아니다 폭발로부터 파편에 맞았지만 서버 게임 ~였다 - 이제 당신은 점수에 차이가 있으며, 이는 하이 스코어 제출을 잘못 무효화 할 수 있습니다.

하는 동안 strictfp 확실히은 총알이 아니며, 다른 플랫폼에서 '리플레이'지침의 일관성을 부과하는 데 큰 도움이됩니다.

다른 팁

이것이 바로 자바 언어 사양 말 :

FP-Strict 표현식 내에서, 모든 중간 값은 플로트 값 세트의 요소 또는 이중 값 세트 여야하며, 이는 모든 FP-Strict 표현식의 결과가 IEEE 754 단일 및 이중 형식을 사용하여 표현 된 IEEE 754 산술로 예측 된 결과임을 암시합니다. . FP 주류가 아닌 표현 내에서, 중간 결과를 나타내는 확장 지수 범위를 사용하기 위해 구현에 일부 여유가 부여됩니다. 대략적으로 말하자면, 계산은 플로트 값 세트 또는 이중 값 세트를 독점적으로 사용하면 오버 플로우 또는 언더 플로우를 초래할 수있는 상황에서 "정당"을 생성 할 수 있다는 것입니다.

그것이 의미하는 바는 다음과 같습니다. 부동 소수점 산술 (즉, 관련 계산 float 그리고 double 유형)에서 Java는 IEEE 754 표준은 FP 번호를 정확하게 나타내는 방법을 말합니다. 문제는 최신 CPU가 내부적으로 중간 결과를위한 표준을 준수하지 않는 FP 산술을 내부적으로 사용한다는 것입니다. 이는 실제로 더 빠르고 더 정확한 결과를 산출하기 때문에 일반적으로 문제가되지 않습니다. 그러나 프로그램은 Java의 플랫폼 독립성의 기본 약속에 위배되는 하드웨어에 따라 약간 다른 결과를 생성한다는 것을 의미 할 수 있습니다.

그만큼 strictfp 키워드는이 약속을 유지하고 프로그램이 어디에서 실행 되더라도 프로그램이 정확히 동일한 결과를 얻을 수 있도록 할 수 있습니다. 그러나 이것은 FP 계산을 준수하기 위해 추가 노력을 소비 해야하는 하드웨어의 성능 저하 비용이 발생합니다. 모든 중간 결과에 대한 IEEE 754.

대부분의 경우, Rahter는 플랫폼에서 동일한 결과를 보장하기보다는 더 나은 성능을 가지고있을 것입니다. strictfp 행동은 선택 사항입니다. 실제로 그랬습니다 만들어진 JVM 1.4의 선택적 JVM 구현자는 CPU가 대부분의 시간에 그러한 엄격한 준수가 장점이 없을 때 사양을 준수하기 위해 추가 작업을 수행해야한다는 것을 깨달았습니다.

strictfp는 매우 특별합니다.

a로 보자 우주 대행사 사례.

작성된 코드는 매우 구체적인 과학 숫자를 사용합니다. 이제이 숫자는 멀티 플레이어 소수점.

이것들 소수의 가치는 궤적에 영향을 미칩니다 마찰, 중력, 열, 수분, 선을 수용 한, 전기 생성, 여러 중력 몸체, 속도, 연도 효율과 같은 상수에 의해 영향을받는 우주선 경로.

주요 요점은 데이터가 선박을 추적하기 위해 평가를 위해 보낼 때 다른 플랫폼에 대해 동일한 값을 반환해야합니다. 그렇지 않으면 우리는 소수점 값으로 약간 다른 데이터를 받게됩니다.

그러나 이것은 선박이 궤적에서 벗어나게하고, 연기 미적분학을 기억하고, 각 작은 점은 궤적을 만듭니다. 계산은 다른 플랫폼에 대해서도 매우 구체적이고 일관성이 있어야합니다. 스탠더와 정확도가 있어야합니다.

이 요구 사항을 위해 Java에는 strictfp가 있습니다.

당신은 그것을 보여줄 프로그램을 원합니다. 작은 프로그램으로 이것을 정확하게 보여주기가 어렵습니다..

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top