Từ khoá strictfp trong java

Trong java mặc định thì floating-point tính toán dựa vào platform do đó độ chính xác của các giá trị thập phân cũng phụ thuộc vào phần cứng đang sử dụng.

Sử dụng strictfp để đảm bảo rằng floating-point sẽ được tính toán độc lập với platform.

Chúng ta có thể sử dụng strictfp với class, non-abstract method, interface.

public strictfp class Calculator {
     
    public double sum(double value1, double value2) {
        return value1 + value2;
    }
 
    public double diff(double value1, double value2) { 
        return value1 - value2; 
    }
}
 
public strictfp void calculateMarksPercentage() {
    ...
}
 
public strictfp interface Circle {
    double computeArea(double radius);
}

Khi sử dụng strictfp với class hoặc interface thì các thành viên bên trong chúng cũng có hành vi tương tự(floating-point độc lập).

Chúng ta không được sử dụng strictfp với biến, constructor, abstract method.

Khi nào sử dụng strictfp

Khi chúng ta cần các phép tính đúng với mọi platform thì strictfp sẽ có ích cho bạn.

@Test
public void whenMethodOfstrictfpClassInvoked_thenIdenticalResultOnAllPlatforms() {
    Calculator calculator = new Calculator();
    double result = calculator.sum(23e10, 98e17);
    assertThat(result, is(9.800000230000001E18));
 
    result = calculator.diff(Double.MAX_VALUE, 1.56);
    assertThat(result, is(1.7976931348623157E308));
}

Calculator class được sử dụng với strictfp nên unit test ở trên sẽ pass với tất cả các flatform phần cứng. 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x