최근 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에 대한 좋은 추가 정보를 제공합니다.

댓글

  • 그 ' 맞습니다. 이것이 표준 접근 방식이어야합니다.
  • 그리고 얼마나 자주 사람들이 절차 별 절차와 테스트없이 맹목적으로 프로그램의 정밀도를 변경해야합니까? _dp 체계를 사용하는 주된 이유는 정밀도가 명확하기 때문입니다. 이식 가능한 방식으로 정의되었습니다.

Answer

변수를 배정 밀도로 선언했지만 다음을 사용하여 초기화했습니다. 단 정밀도 값입니다.

다음과 같이 작성할 수 있습니다.

X=1.0d0 Y=1.0d-1 

Barron “s 대답 아래는 리터럴 배정 밀도를 만드는 또 다른 방법으로, 나중에 변수의 정밀도를 변경할 수 있다는 장점이 있습니다.

댓글

  • 아래 게시물에 설명 된 1.0_dp 방법을 사용해야한다고 생각합니다.
  • 두 번째 @ OndřejČert í k '의 댓글-Barron '의 답변이 가장 좋습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다