Visible to Intel only — GUID: GUID-1F105482-70AF-4860-B007-053988B08723
Visible to Intel only — GUID: GUID-1F105482-70AF-4860-B007-053988B08723
CLEARSTATUSFPQQ
Portability Subroutine: Clears the exception flags in the floating-point processor status word.
Module
USE IFPORT
CALL CLEARSTATUSFPQQ()
Description
The floating-point status word indicates which floating-point exception conditions have occurred. Intel® Fortran initially clears (sets to 0) all floating-point status flags, but as exceptions occur, the status flags accumulate until the program clears the flags again. CLEARSTATUSFPQQ will clear the flags.
CLEARSTATUSFPQQ is appropriate for use in applications that poll the floating-point status register as the method for detecting a floating-point exception has occurred.
For a full description of the floating-point status word, exceptions, and error handling, see Floating-Point Operations: Floating-Point Environment.
Example
! Program to demonstrate CLEARSTATUSFPQQ.
!
! This program uses polling to detect that a
! floating-point exception has occurred.
! So, build this console application with the default
! floating-point exception behavior, fpe3.
! You need to specify compiler option /debug or /Od (Windows)
! or -O0 (Linux) to get the correct results.
!
! PROGRAM CLEARFP
USE IFPORT
REAL*4 A,B,C
INTEGER*2 STS
A = 2.0E0
B = 0.0E0
! Poll and display initial floating-point status
CALL GETSTATUSFPQQ(STS)
WRITE(*,'(1X,A,Z4.4)') 'Initial fp status = ',STS
! Cause a divide-by-zero exception
! Poll and display the new floating-point status
C = A/B
CALL GETSTATUSFPQQ(STS)
WRITE(*,'(1X,A,Z4.4)') 'After div-by-zero fp status = ',STS
! If a divide by zero error occurred, clear the floating-point
! status register so future exceptions can be detected.
IF ((STS .AND. FPSW$ZERODIVIDE) > 0) THEN
CALL CLEARSTATUSFPQQ()
CALL GETSTATUSFPQQ(STS)
WRITE(*,'(1X,A,Z4.4)') 'After CLEARSTATUSFPQQ fp status = ',STS
ENDIF
END
This program is available in the online samples.