IEEE 모듈: `IEEE_EXCEPTIONS`, `IEEE_ARITHMETIC`, `IEEE_FEATURES`
IEEE 모듈: IEEE_EXCEPTIONS, IEEE_ARITHMETIC, IEEE_FEATURES
Fortran의 IEEE 754 부동소수점 동작을 제어하는 세 가지 내장 모듈을 소개하는 문서예요. 예외 처리, IEEE 산술 연산, 그리고 기능 켜고 끄기를 담당하는 모듈이 각각 어떻게 제공되는지와, 이 모듈들이 동작하는 플랫폼 제약, 그리고 표준 준수를 위해 권장되는 컴파일 옵션을 다뤄요.
본문
표준: Fortran 2003 이상
IEEE_EXCEPTIONS, IEEE_ARITHMETIC, IEEE_FEATURES 내장 모듈은 Fortran 2003 이후 표준과 IEC 60559:1989 표준(마이크로프로세서 시스템용 이진 부동소수점 산술)에 정의된 예외와 IEEE 산술을 지원해요. 다만 이 모듈들은 다음 플랫폼에서만 제공돼요:
- i386 및 x86_64 프로세서
- GNU C 라이브러리(glibc)를 사용하는 플랫폼
- 부동소수점 인터페이스를 위한 SysV/386 루틴을 지원하는 플랫폼(Solaris, BSD 포함)
- AIX 운영체제가 있는 플랫폼
Fortran 표준을 완전히 준수하려면, IEEE_EXCEPTIONS 또는 IEEE_ARITHMETIC 모듈을 사용하는 코드는 다음 옵션으로 컴파일해야 해요:
-fno-unsafe-math-optimizations -frounding-math -fsignaling-nans
더 알아보기
IEEE_FEATURES는 IEEE 기능을 켜고 끄는 데,IEEE_EXCEPTIONS는 예외 감지·제어에,IEEE_ARITHMETIC은 IEEE 산술 연산에 각각 쓰여요.- 이 모듈들의 핵심은 컴파일러가 부동소수점 연산을 "안전하게" 최적화하지 않도록 하는 데 있어요. 그래서 위의 세 옵션을 함께 쓰는 게 중요해요.
- 지원 플랫폼이 제한돼 있으므로, 이식할 타깃이 목록에 있는지 먼저 확인해 보세요.
- 예를 들어
IEEE_EXCEPTIONS모듈은ieee_get_flag/ieee_set_flag같은 함수로 예외 플래그를 읽고 쓰는 일을 도와줘요. 유한소수점 검사가 중요한 수치 코드에서 특히 유용해요. -frounding-math는 반올림 모드 변경을 존중하고,-fsignaling-nans는 신호 나눔(signaling NaN)을 허용해 IEEE 의미론을 지키는 데 필요해요.