36 lines
662 B
Fortran
36 lines
662 B
Fortran
program main
|
|
use, intrinsic :: iso_fortran_env, only : error_unit, sp=>real32, dp=>real64
|
|
implicit none
|
|
|
|
real(sp) :: a32
|
|
real(dp) :: a64
|
|
|
|
real(sp), parameter :: pi32 = 4*atan(1._sp)
|
|
real(dp), parameter :: pi64 = 4*atan(1._dp)
|
|
|
|
if (pi32 == pi64) error stop 'real32 values generally do not exactly equal real64 values'
|
|
|
|
call timestwo(a32)
|
|
call timestwo(a64)
|
|
|
|
contains
|
|
|
|
elemental subroutine timestwo(a)
|
|
|
|
class(*), intent(inout) :: a
|
|
|
|
select type (a)
|
|
type is (real(sp))
|
|
a = 2*a
|
|
type is (real(dp))
|
|
a = 2*a
|
|
type is (integer)
|
|
a = 2*a
|
|
class default
|
|
error stop 'requires real32, real64 or integer'
|
|
end select
|
|
|
|
end subroutine timestwo
|
|
|
|
end program
|