37 lines
877 B
Forth
37 lines
877 B
Forth
program basic_stats
|
|
implicit none
|
|
|
|
integer, parameter :: i64 = selected_int_kind(18)
|
|
integer, parameter :: r64 = selected_real_kind(15)
|
|
integer(i64), parameter :: samples = 1000000000_i64
|
|
|
|
real(r64) :: r
|
|
real(r64) :: mean, stddev
|
|
real(r64) :: sumn = 0, sumnsq = 0
|
|
integer(i64) :: n = 0
|
|
integer(i64) :: bin(10) = 0
|
|
integer :: i, ind
|
|
|
|
call random_seed
|
|
|
|
n = 0
|
|
do while(n <= samples)
|
|
call random_number(r)
|
|
ind = r * 10 + 1
|
|
bin(ind) = bin(ind) + 1_i64
|
|
sumn = sumn + r
|
|
sumnsq = sumnsq + r*r
|
|
n = n + 1_i64
|
|
end do
|
|
|
|
mean = sumn / n
|
|
stddev = sqrt(sumnsq/n - mean*mean)
|
|
write(*, "(a, i0)") "sample size = ", samples
|
|
write(*, "(a, f17.15)") "Mean : ", mean,
|
|
write(*, "(a, f17.15)") "Stddev : ", stddev
|
|
do i = 1, 10
|
|
write(*, "(f3.1, a, a)") real(i)/10.0, ": ", repeat("=", int(bin(i)*500/samples))
|
|
end do
|
|
|
|
end program
|