program rounding implicit none integer :: j, k, err, ieee_flags, rounding_type real :: s1, s2 ! enkel precision double precision, parameter :: facit = 14.39272672286577d0 character (len = 9) :: out ! ! round är en strängvektor ! character (len = *), dimension(4), parameter :: & round = (/ 'nearest ', 'tozero ', 'positive', 'negative' /) print'(a)', 'type s1 error s2 error' do rounding_type = 1, 4 ! testa de fyra avrundningsriktningarna ! ! Sätt "rounding direction" med en speciell Sun-rutin ! (ej standard). ! err = ieee_flags('set', 'direction', round(rounding_type), out) ! ! Beräkna summorna ! s1 = 0.0 s2 = 0.0 do k = 1, 1000000 s1 = s1 + 1.0 / k s2 = s2 + 1.0 / (1000001 - k) end do print '(a, 2(f12.7, f9.4))', round(rounding_type) // ' :', & s1, s1 - facit, s2, s2 - facit end do end program rounding