The intrinsic function MODULO returns a wrong result when used with 32 bit integers, as shown in the following example:
PROGRAM div
IMPLICIT NONE
INTEGER, PARAMETER :: k=3
INTEGER(KIND=k) :: a,b
b=43*144*16
a=27*144*16
WRITE(*,*) 'a = ', a, ' b = ', b, ' MOD(a,b) = ', MOD(a,b)
WRITE(*,*) 'b = ', b, ' a = ', a, ' MOD(b,a) = ', MOD(b,a)
WRITE(*,*) 'a = ', a, ' b = ', b, ' MODULO(a,b) = ', MODULO(a,b)
WRITE(*,*) 'b = ', b, ' a = ', a, ' MODULO(b,a) = ', MODULO(b,a)
END PROGRAM div
Output for k=3 a = 62208 b = 99072 MOD(a,b) = 62208 b = 99072 a = 62208 MOD(b,a) = 36864 a = 62208 b = 99072 MODULO(a,b) = 62208 b = 99072 a = 62208 MODULO(b,a) = 99072 Output for k=4 (correct) a = 62208 b = 99072 MOD(a,b) = 62208 b = 99072 a = 62208 MOD(b,a) = 36864 a = 62208 b = 99072 MODULO(a,b) = 62208 b = 99072 a = 62208 MODULO(b,a) = 36864 Compiler version: FTN95 8.80