A range summary tracks the smallest and largest active values before subtracting them.

Program

Play the program to summarize a longer or shorter prefix of the measurements.

range_summary.f90
program range_summary_demo
    implicit none
    integer :: measurements(5)
    integer :: limit_count
    integer :: i
    integer :: low
    integer :: high
    integer :: spread

    measurements = [8, 3, 9, 7, 10]
    limit_count = 
    low = measurements(1)
    high = measurements(1)
    do i = 2, limit_count
        if (measurements(i) < low) low = measurements(i)
        if (measurements(i) > high) high = measurements(i)
    end do
    spread = high - low
    print '(I0, 1X, I0, 1X, I0, 1X, I0)', limit_count, low, high, spread
end program range_summary_demo
program range_summary_demo
    implicit none
    integer :: measurements(5)
    integer :: limit_count
    integer :: i
    integer :: low
    integer :: high
    integer :: spread

    measurements = [8, 3, 9, 7, 10]
    limit_count = 
    low = measurements(1)
    high = measurements(1)
    do i = 2, limit_count
        if (measurements(i) < low) low = measurements(i)
        if (measurements(i) > high) high = measurements(i)
    end do
    spread = high - low
    print '(I0, 1X, I0, 1X, I0, 1X, I0)', limit_count, low, high, spread
end program range_summary_demo
program range_summary_demo
    implicit none
    integer :: measurements(5)
    integer :: limit_count
    integer :: i
    integer :: low
    integer :: high
    integer :: spread

    measurements = [8, 3, 9, 7, 10]
    limit_count = 
    low = measurements(1)
    high = measurements(1)
    do i = 2, limit_count
        if (measurements(i) < low) low = measurements(i)
        if (measurements(i) > high) high = measurements(i)
    end do
    spread = high - low
    print '(I0, 1X, I0, 1X, I0, 1X, I0)', limit_count, low, high, spread
end program range_summary_demo
initial extrema Both `low` and `high` start from the first active observation.
conditional update Each later value updates only the summary it beats.
spread The range width is `high - low` after the scan finishes.