엄격한 fp
strictfpstrongfp는 Java 프로그래밍 언어에서 구식이고 사용되지 않는 예약어다.[1][2]기존에는 휴대성을 확보하기 위해 부동소수점 계산을 제한하는 수식어로 이 키워드를 사용했다.엄격한 fp 키워드는 자바 가상 머신(JVM) 버전 1.2와 함께 자바에 도입되었으며, JVM 버전 17에서 기능이 제거되었다.[2]자바 17을 기준으로 이 키워드를 사용하는 것은 아무런 효과가 없다.
기본
IEEE 표준 IEEE 754는 부동소수점 계산과 부동소수점 값을 단일(32비트, 자바에서 사용)를 포함한 다양한 형식으로 저장하는 표준 방법을 지정한다.float) 또는 더블(64비트, 자바에서 사용double) 정밀도.
또한 일부 하드웨어는 더 높은 정밀도 및/또는 더 큰 지수 범위를 제공하는 확장 정밀도 형식을 제공한다.그러한 아키텍처에서는 그러한 확장된 형식을 사용하여 중간 결과를 계산하는 것이 더 효율적일 수 있다.이것은 그렇지 않으면 발생할 수 있는 반올림 오류, 오버플로 및 언더플로우를 피할 수 있지만, 프로그램이 그러한 아키텍처에서 다른 출력을 생성하게 할 수 있다.전통적인 x87 부동 소수점 아키텍처로 x86 기계에 확장 정밀도를 사용하지 않는 것은 특히 비쌌다.계산 정밀도를 제어하기는 쉬웠지만 중간 결과에 대한 지수 범위를 제한하려면 추가 비용이 많이 드는 지침이 필요했다.
JVM1.2이전에 부동엄격해야 했다. 즉,모든중간부동 소수점 결과는 IEEE단일 또는 이중 정밀도를 사용하여 표현된 것처럼 행동해야 했다 계산은 소수점.이로 인해 필요한 경우 오버플로가 발생할 수 있도록 일반적인 x87 기반 하드웨어에 비용이 많이 들었다.
JVM 1.2 이후 중간 계산은 기본적으로 IEEE 32비트 및 64비트 형식과 관련된 표준 지수 범위를 초과할 수 있다.대신 "확장-엑스포트" 값 집합의 구성원으로 나타낼 수 있다.x87과 같은 플랫폼에서는 예상된 곳에서 오버플로 및 언더플로우가 발생하지 않을 수 있으며, 대신 더 의미 있는 결과를 도출할 수 있다.
SSE2를 지원하는 x86 프로세서에서는 x87 부동소수가 더 이상 필요하지 않기 때문에, 자바 17은 다시 모든 부동소 운영을 엄격하게 하여 1.2 이전의 의미론을 효과적으로 복원하였다.[3]
작동 방식
오버플로나 과부하가 없는 경우에는 엄격한 fp와 함께 있든 없든 결과의 차이가 없다.반복성이 필수적인 경우 모든 플랫폼의 동일한 위치에서 오버플로 및 언더플로우가 발생하도록 하기 위해 엄격한 fp 수식어를 사용할 수 있다.엄격한 fp 수식어가 없으면 중간 결과는 더 큰 지수 범위를 사용할 수 있다.[4]
그strictfp수정자는 모든 중간 값을 이전 버전의 JVM에서 발생한 IEEE 단일 정밀도 및 이중 정밀도 값으로 표현함으로써 이를 달성한다.[5]
사용법
프로그래머는 수식어를 사용할 수 있다.strictfp이전 버전과 같이 계산이 수행되는지 확인하는 것, 즉 IEEE 단일 및 이중 정밀도 유형만 사용됨.엄격한 fp를 사용하면 모든 플랫폼에서 부동소수점 계산 결과가 동일하다는 것을 보장한다.
그것은 클래스, 인터페이스, 그리고 추상적이지 않은 방법에 사용될 수 있다.[6]어떤 방법에 적용하면 그 방법 내부의 모든 계산이 엄격한 부동 소수점 산술법을 사용하게 된다.클래스에 적용하면 클래스 내 모든 계산은 엄격한 부동 소수점 산술을 사용한다.컴파일 시간 상수 표현식은 항상 엄격한 부동 소수점 동작을 사용해야 한다.[7]
예
공중의 엄격한 fp 계급 MyFP클래스 { // ...여기 수업 내용... } 참조
- ^ "Java Language Specification - Chapter 3. Lexical Structure".
{{cite web}}: CS1 maint : url-status (링크) - ^ a b "JEP 306: Restore Always-Strict Floating-Point Semantics".
{{cite web}}: CS1 maint : url-status (링크) - ^ Darcy, Joseph D. "JEP 306: Restore Always-Strict Floating-Point Semantics".
- ^ Gosling, James; Joy, Bill; Steele, Guy L. Jr.; Bracha, Gilad; Buckley, Alex; Smith, Daniel (2017). "4.2.3 Floating-Point Types, Formats, and Values". The Java Language Specification, Java SE 9 Edition. Addison-Wesley Professional. Retrieved 2017-10-06.
- ^ Flanagan, David (March 2005). Java in a Nutshell (Fifth ed.). O'Reilly Media. ISBN 978-0-596-00773-7. Retrieved 2010-03-03.
- ^ Schildt, Herbert (2007). Java: A Beginner's Guide (4 ed.). McGraw-Hill Companies. ISBN 978-0-07-226384-8.
- ^ Gosling, James; Joy, Bill; Steele, Guy L. Jr.; Bracha, Gilad (2005). "15.4 FP-strict Expressions". The Java Language Specification, Third Edition. Addison-Wesley Professional. p. 411. ISBN 0-321-24678-0. Retrieved 2016-03-22.