program montecarlo real :: randomNumber,error,area,deltaArea real :: xRandom,yRandom integer :: totalPoints, areaPoints call initRandomSeed(); error = 0.01 deltaArea = 1.0 arePoints = 0 totalPoints = 0 do while (deltaArea > error) call random_number(randomNumber) xRandom = randomNumber call random_number(randomNumber) yRandom = randomNumber if (yRandom < cos(xRandom)) then areaPoints = areaPoints + 1 end if totalPoints = totalPoints + 1 area = areaPoints*1.0/totalPoints print*, area deltaArea = abs( area - areaOld) areaOld = area end do !--------------------------------------------------------- contains subroutine initRandomSeed() integer :: i, n, clock integer, dimension(:), allocatable :: seed call random_seed(size = n) allocate(seed(n)) call system_clock(count=clock) seed = clock + 37 * (/ (i - 1, i = 1, n) /) call random_seed(put = seed) deallocate(seed) end subroutine initRandomSeed end program montecarlo