program find_element_in_array implicit none integer, parameter :: dp = selected_real_kind(2*precision(1.0)) real(dp), parameter :: PI=3.141592653589793238462643383279502884197_dp integer :: i integer, parameter :: num_elements = 100000000 real(dp), parameter :: target_value = 90000000._dp*PI real(dp), dimension(:), allocatable :: array1, array2 real :: t1, t2 integer :: loc loc=0 allocate(array1(num_elements), array2(num_elements)) ! Create array do i = 1, num_elements array1(i) = i*PI end do ! method 1 call cpu_time(t1) do i = 1, num_elements if (array1(i) == target_value) then loc = i exit endif end do call cpu_time(t2) write(*,'(A,E24.16,A,I10)') "Value ", target_value, " found at ", loc write(*,*) "CPU time: ", t2-t1 ! method 2 call cpu_time(t1) forall (i=1:num_elements) array2(i) = abs(array1(i) - target_value) loc = minloc(array2, 1) call cpu_time(t2) write(*,'(A,E24.16,A,I10)') "Value ", target_value, " found at ", loc write(*,*) "CPU time: ", t2-t1 ! method 3 call cpu_time(t1) loc = minloc(abs(array1 - target_value), 1) call cpu_time(t2) write(*,'(A,E24.16,A,I10)') "Value ", target_value, " found at ", loc write(*,*) "CPU time: ", t2-t1 end program find_element_in_array |