최근 FORTRAN95에서 기괴한 문제가 발생했습니다. 변수 X와 Y를 다음과 같이 초기화했습니다.
X=1.0 Y=0.1
나중에 이들을 함께 추가하고 결과를 인쇄합니다.
1.10000000149012
변수를 검토 한 후 0.1은 완전한 정확도로 배정 밀도로 표현되지 않는 것 같습니다.이를 피할 수있는 방법이 있습니까?
답변
이를 수행하는 또 다른 방법은 먼저 SELECTED_REAL_KIND 내장 함수를 사용하여 변수에 원하는 정밀도를 명시 적으로 지정한 다음이를 사용하여 변수를 정의하고 초기화하는 것입니다. :
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15) REAL(dp) :: x x = 1.0_dp
이렇게하면 좋은 이점은 dp
의 정의를 모듈, 그런 다음 필요한 곳에 해당 모듈을 USE
. 이제 정밀도를 변경하려는 경우 프로그램의 모든 D0
를 검색하고 바꾸는 대신 한 곳에서 dp
의 정의를 변경하기 만하면됩니다. 변수 초기화의 끝. (이것이 내가 제안한대로 Y를 정의하는 데 1.0D-1
구문을 사용하지 않는 것이 좋습니다. 작동하지만 앞으로 모든 인스턴스를 찾고 변경하기가 더 어려워집니다.)
이 페이지 는 Fortran Wiki의 SELECTED_REAL_KIND
에 대한 좋은 추가 정보를 제공합니다.
댓글
Answer
변수를 배정 밀도로 선언했지만 다음을 사용하여 초기화했습니다. 단 정밀도 값입니다.
다음과 같이 작성할 수 있습니다.
X=1.0d0 Y=1.0d-1
Barron “s 대답 아래는 리터럴 배정 밀도를 만드는 또 다른 방법으로, 나중에 변수의 정밀도를 변경할 수 있다는 장점이 있습니다.
댓글
- 아래 게시물에 설명 된 1.0_dp 방법을 사용해야한다고 생각합니다.
- 두 번째 @ OndřejČert í k '의 댓글-Barron '의 답변이 가장 좋습니다.
_dp
체계를 사용하는 주된 이유는 정밀도가 명확하기 때문입니다. 이식 가능한 방식으로 정의되었습니다.