Numerical Patterns
Convergence Steps
Halve an Error
Many numerical methods repeatedly reduce an error estimate. A small bounded loop can show the shape without doing heavy computation.
Program
Play the program to choose how many halving steps are applied.
convergence_steps.f90
Replay: real traced execution (multi-file project)
program convergence_steps_demo
implicit none
integer :: step_count
integer :: i
real :: error
step_count = 3
error = 1.0
do i = 1, step_count
error = error / 2.0
end do
print '(F0.3)', error
end program convergence_steps_demo
program convergence_steps_demo
implicit none
integer :: step_count
integer :: i
real :: error
step_count = 1
error = 1.0
do i = 1, step_count
error = error / 2.0
end do
print '(F0.3)', error
end program convergence_steps_demo
program convergence_steps_demo
implicit none
integer :: step_count
integer :: i
real :: error
step_count = 5
error = 1.0
do i = 1, step_count
error = error / 2.0
end do
print '(F0.3)', error
end program convergence_steps_demo
step_count ← 3
7step_count = 38error = 1.0values this step3step_counterror ← 1.000
7step_count = 38error = 1.09do i = 1, step_countvalues this step1.000errorerror ← 0.500
9do i = 1, step_count10 error = error / 2.011end dovalues this step1.000 → 0.500error1ierror ← 0.250
9do i = 1, step_count10 error = error / 2.011end dovalues this step0.500 → 0.250error2ierror ← 0.125
9do i = 1, step_count10 error = error / 2.011end dovalues this step0.250 → 0.125error3iprint '(F0.3)', error
11 end do12 print '(F0.3)', error13end program convergence_steps_demooutput0.125values this step0.125error
step_count ← 1
7step_count = 18error = 1.0values this step1step_counterror ← 1.000
7step_count = 18error = 1.09do i = 1, step_countvalues this step1.000errorerror ← 0.500
9do i = 1, step_count10 error = error / 2.011end dovalues this step1.000 → 0.500error1iprint '(F0.3)', error
11 end do12 print '(F0.3)', error13end program convergence_steps_demooutput0.500values this step0.500error
step_count ← 5
7step_count = 58error = 1.0values this step5step_counterror ← 1.000
7step_count = 58error = 1.09do i = 1, step_countvalues this step1.000errorerror ← 0.500
9do i = 1, step_count10 error = error / 2.011end dovalues this step1.000 → 0.500error1ierror ← 0.250
9do i = 1, step_count10 error = error / 2.011end dovalues this step0.500 → 0.250error2ierror ← 0.125
9do i = 1, step_count10 error = error / 2.011end dovalues this step0.250 → 0.125error3ierror ← 0.062
9do i = 1, step_count10 error = error / 2.011end dovalues this step0.125 → 0.062error4ierror ← 0.031
9do i = 1, step_count10 error = error / 2.011end dovalues this step0.062 → 0.031error5iprint '(F0.3)', error
11 end do12 print '(F0.3)', error13end program convergence_steps_demooutput0.031values this step0.031error
bounded loop
`do i = 1, step_count` keeps the iteration count explicit.
error update
Each loop halves the current error estimate.
convergence
Repeated reduction shows the approach toward zero without relying on timing.