스칼라 INTEGER를 생성하고 서브 루틴으로 전달하면 해당 값이 부동 소수점으로 변환되고 끔찍하게 부정확합니다. 예를 들어, s = 2로 설정하고 print_my_int를 호출하면 (,) 콘솔에 출력되며, 그 값은 2.80259693E-45로 표시됩니다. 다른 스칼라 정수는 s = 0 인 경우를 제외하고는 유사하게 동작합니다.이 경우 출력은 0.0000000입니다. 그러나 정수는 분명히 소수점과 가수를 표시하지 않아야하기 때문에 이것은 여전히 잘못된 것입니다. 로컬로 표시 될 때 다른 정수가 올바르게 표시되도록 할 수 있으므로 출력 형식 문제가 아닙니다.Help! FORTRAN 정수를 전달하면 부정확 한 수레로 변환됩니다.
여기에 무슨 일이 일어나고 있는지 실마리가 있습니까? 서브 루틴 정의에서 인수 데이터 형식을 강제로 사용해야합니까? 이것도 할 수 있습니까?
예제 코드 :
PROGRAM print_int
INTEGER s
s = 2
CALL print_my_int(s)
END PROGRAM print_int
SUBROUTINE print_my_int(x)
WRITE(*,*) x
END SUBROUTINE print_my_int
결과 출력 :
2.80259693E-45
FORTRAN에 변수 이름의 초기 문자를 기반으로 유추가 있기 때문에 매개 변수 이름을'x'에서'i' 또는'j'로 변경하면 작동합니다. 그러나 그렇게하지 마십시오. 나쁜 습관입니다. – JasonFruit
고마워요. 핸디 팁,하지만 과실을 피하기 위해주의 할 것입니다. –
선언되지 않은 변수에 컴파일러 초크를 만들려는 경우 모든 프로그램/서브 루틴의 시작 부분에 "암시 적 없음"문을 사용하는 것이 좋습니다. – steabert