[COLOR=#a020f0]module[/color] my_numeric
[COLOR=#a020f0]contains[/color]
[COLOR=#a020f0]function[/color] machine_epsilon(start) [COLOR=#a020f0]result[/color] (macheps)
[COLOR=#0000ff]! Machine Epsilon[/color]
[COLOR=#2e8b57][b] real[/b][/color], [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: start
[COLOR=#2e8b57][b] real[/b][/color] :: macheps
macheps [COLOR=#804040][b]=[/b][/color] start
[COLOR=#804040][b]do[/b][/color] [COLOR=#804040][b]while[/b][/color] (macheps [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1.0[/color] [COLOR=#804040][b]>[/b][/color] [COLOR=#ff00ff]1.0[/color])
macheps [COLOR=#804040][b]=[/b][/color] macheps [COLOR=#804040][b]/[/b][/color] [COLOR=#ff00ff]2.0[/color]
[COLOR=#0000ff]!write (*,*) 'macheps =', macheps[/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#a020f0]end function[/color] machine_epsilon
[COLOR=#a020f0]subroutine[/color] harmonic_series(macheps)
[COLOR=#0000ff]! t and sum(1/t) aka harmonic series[/color]
[COLOR=#2e8b57][b] real[/b][/color] :: macheps, s, s_old, t
s_old [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0.0[/color]
s [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1.0[/color]
t[COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#0000ff]!write (*,*) 't = ', t,': s = ', s, ' s_old = ', s_old [/color]
[COLOR=#804040][b]do[/b][/color] [COLOR=#804040][b]while[/b][/color] ((s [COLOR=#804040][b]-[/b][/color] s_old) [COLOR=#804040][b]>[/b][/color] macheps)
t [COLOR=#804040][b]=[/b][/color] t [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1[/color]
s_old [COLOR=#804040][b]=[/b][/color] s
s [COLOR=#804040][b]=[/b][/color] s [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1.0[/color][COLOR=#804040][b]/[/b][/color]t
[COLOR=#0000ff]!write (*,*) 't = ', t,': s = ', s, ' s_old = ', s_old [/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Result for given macheps = '[/color], macheps
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'t = '[/color], t,[COLOR=#ff00ff]': sum(1/t) = '[/color], s
[COLOR=#a020f0]end subroutine[/color] harmonic_series
[COLOR=#a020f0]end module[/color] my_numeric
[COLOR=#a020f0]program[/color] sum_of_series
[COLOR=#a020f0]use[/color] my_numeric
[COLOR=#2e8b57][b] real[/b][/color] :: macheps, s, s_old, t
[COLOR=#0000ff]! compute Machine Epsilon[/color]
macheps [COLOR=#804040][b]=[/b][/color] machine_epsilon([COLOR=#ff00ff]0.5[/color])
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Machine Epsilon ='[/color], macheps
[COLOR=#0000ff]! compute largest possible t for sum(1/t) aka harmonic series [/color]
[COLOR=#a020f0]call[/color] harmonic_series(macheps)
[COLOR=#a020f0]end program[/color] sum_of_series