logo

Java의 strictfp 키워드

자바에서는 엄격한 Java 버전 1.2에 도입된 것처럼 Java 기본 버전에는 도입되지 않은 엄격한 부동 소수점을 나타내는 수정자입니다. 부동 소수점 계산을 제한하고 부동 소수점 변수에서 작업을 수행하는 동안 모든 플랫폼에서 동일한 결과를 보장하기 위해 Java에서 사용됩니다. 
부동 소수점 계산은 플랫폼에 따라 다릅니다. 즉, 클래스 파일이 다른 플랫폼(16/32/64비트 프로세서)에서 실행될 때 다른 출력(부동 소수점 값)이 달성됩니다. 이러한 유형의 문제를 해결하기 위해 다음과 같이 JDK 1.2 버전에 strictfp 키워드가 도입되었습니다. IEEE 754 부동 소수점 계산 표준. 

메모: strictfp 수정자는 클래스 인터페이스 및 메소드에만 사용되지만 아래 그림과 같이 변수에는 적용할 수 없습니다.

숫자로 보는 알파벳

그림 1: 클래스에서의 키워드 사용법 



strictfp class Test {  

// All concrete methods here are implicitly strictfp.
}

그림 2: 인터페이스에서의 키워드 사용법 

strictfp interface Test {   
// All methods here becomes implicitly
// strictfp when used during inheritance.
}

class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}

그림 3: 인터페이스에서 Abstract 메소드를 사용한 키워드 사용

strictfp interface Test {  
double sum();

// Compile-time error here
strictfp double mul();
}

위의 그림에서 다음과 같은 몇 가지 결론을 도출할 수 있습니다.

  • 클래스 또는 인터페이스가 strictfp 수정자를 사용하여 선언되면 클래스/인터페이스에 선언된 모든 메서드와 클래스에 선언된 모든 중첩 유형은 암시적으로 strictfp입니다.
  • 엄격한 할 수 없다 추상 메소드와 함께 사용됩니다. 그러나 추상 클래스/인터페이스와 함께 사용할 수 있습니다.
  • 인터페이스의 메소드는 암시적으로 추상이므로 strictfp는 인터페이스 내부의 메소드와 함께 사용할 수 없습니다.
  • Java 17 버전부터는 모든 부동 소수점 표현식이 엄격하게 평가되므로 strictfp 키워드가 명시적으로 필요하지 않습니다.

예: 

Java
// Java program to illustrate strictfp modifier // Usage in Classes // Main class class GFG {  // Method 1  // Calculating sum using strictfp modifier  public strictfp double sum()  {  double num1 = 10e+10;  double num2 = 6e+08;  // Returning the sum  return (num1 + num2);  }  // Method 2  // Main driver method  public static void main(String[] args)  {  // Creating object of class in main() method  GFG t = new GFG();  // Here we have error of putting strictfp and  // error is not found public static void main method  System.out.println(t.sum());  } } 

산출
1.006E11 

산출: 

STS 다운로드

아래에서는 콘솔의 출력을 볼 수 있습니다.

출력 화면' src='//techcodeview.com/img/java/66/strictfp-keyword-in-java.webp' title= 

퀴즈 만들기