I think that for 32-bit, the calculation 'R1-R2.LT.R3' will compare values in the 80-bit FPU.
As R1, R2 and R3 are all real4, I wonder what values are used ? Perhaps it is using values of R1,R2, R3 in the registers from the previous 32-bit truncation, rather that the real4 memory values.
Either way, the use of 'R1-R2.LT.R3', where R1-R2 and R3 are the same real4 stored values is a poor (contrived) test.
The adaptation provides some more information, indicating that for the 32-bit calculation, the register value might be different to the stored real4 value.
PROGRAM TEST
!
REAL*4 R1, R2, R3, r4
LOGICAL*2 LOGRES
!
R1 = 14.0541906 ! 9 figures exceeds real*4 storage accuracy
R2 = 0.0015596
R3 = 14.0526314
R4 = 14.0541906 &
- 0.0015596
! 14.0526310
WRite (*,*) R1
WRite (*,*) R2
WRite (*,*) R3
write (*,*) r1-r2
write (*,*) (r1-r2)-r3
!
LOGRES=R1-R2.LT.R3
WRITE(*,*) LOGRES
!
WRite (*,1) R1
WRite (*,1) R2
WRite (*,1) R3, nearest(r3,-1.), nearest(r3,1.)
write (*,1) r1-r2
write (*,1) (r1-r2)-r3
write (*,2) (r1-r2)-r3
1 format (3f20.8)
2 format (es20.8)
!
END
Is this a contrived test or an actual problem ?