Beliavsky
unread,Apr 19, 2022, 11:56:34 AM4/19/22You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Spacing(0.0_wp) is supposed to give the number adjacent to zero, but it looks like that is actually given by epsilon(x) * tiny(x) , which is smaller. The output of the program
program main
use iso_fortran_env, only: int32, real32
implicit none
integer, parameter :: ikind = int32, wp = real32
integer (kind=ikind) :: i, nbits
integer, parameter :: ni = 4
real(kind=wp) :: x
nbits = bit_size(i)
print*,"bit_size(i) =",nbits
print*,"epsilon(x) =",epsilon(x)
print*,"tiny(x) =",tiny(x)
print*,"epsilon(x) * tiny(x) =",epsilon(x)*tiny(x)
print*,"spacing(0.0_wp) =",spacing(0.0_wp)
print "(/,a12,a16)","i","transfer(i,x)"
do i=0,ni
print*,i,transfer(i,x)
end do
end program main
with gfortran and ifort is
bit_size(i) = 32
epsilon(x) = 1.19209290E-07
tiny(x) = 1.17549435E-38
epsilon(x) * tiny(x) = 1.40129846E-45
spacing(0.0_wp) = 1.17549435E-38
i transfer(i,x)
0 0.00000000
1 1.40129846E-45
2 2.80259693E-45
3 4.20389539E-45
4 5.60519386E-45
and the output of the 64-bit program
program main
use iso_fortran_env, only: int64, real64
implicit none
integer, parameter :: ikind = int64, wp = real64
integer (kind=ikind) :: i, nbits
integer, parameter :: ni = 4
real(kind=wp) :: x
nbits = bit_size(i)
print*,"bit_size(i) =",nbits
print*,"epsilon(x) =",epsilon(x)
print*,"tiny(x) =",tiny(x)
print*,"epsilon(x) * tiny(x) =",epsilon(x)*tiny(x)
print*,"spacing(0.0_wp) =",spacing(0.0_wp)
print "(/,a21,a16)","i","transfer(i,x)"
do i=0,ni
print*,i,transfer(i,x)
end do
end program main
is
bit_size(i) = 64
epsilon(x) = 2.2204460492503131E-016
tiny(x) = 2.2250738585072014E-308
epsilon(x) * tiny(x) = 4.9406564584124654E-324
spacing(0.0_wp) = 2.2250738585072014E-308
i transfer(i,x)
0 0.0000000000000000
1 4.9406564584124654E-324
2 9.8813129168249309E-324
3 1.4821969375237396E-323
4 1.9762625833649862E-323