#!/usr/bin/env ruby
#==========================================================================
# Author: martin.vahi@softf1.com.
# This file is in public domain.
#==========================================================================

# samm_4=funktsioon(samm_4_miinus_1_ehk_samm_3,
#                   samm_4_miinus_2_ehk_samm_2,
#                   samm_4_miinus_3_ehk_samm_1)
def fd_gen_4(fd_gen_3,fd_gen_2,fd_gen_1)
   fd_out=fd_gen_3+
   Math.sin(fd_gen_2+Math.log(fd_gen_1.abs))+
   Math.cos(Math.log(2*fd_gen_3))
   return fd_out
end # fd_gen_4


def fd_fd_fd_ar_amat66rkaos(fd_algseadistus, i_arvujada_max_pikkus)
   raise(Exception.new("i_arvujada_max_pikkus<3")) if i_arvujada_max_pikkus<3
   ar=[1.0,1.0,1.0]
   ar_out=[]+ar
   fd_uus=nil
   i_arvujada_max_pikkus.times do
      fd_uus=fd_gen_4(ar[2],ar[1],ar[0])
      ar_out<<ar[0]
      ar[0]=ar[1] # lyhem variant: ar.rotate!; ar[2]=fd_uus
      ar[1]=ar[2]
      ar[2]=fd_uus.round(7)
   end # loop
   #-----
   # Siinne r2pane h2kk on m8eldud idee demoks
   ar_tmp=([]+ar_out).sort
   fd_len_genereeritud=1.0*ar_out.size
   ar_out.uniq!
   fd_len_unikaalsed=1.0*ar_out.size
   fd_kaootilisus=(fd_len_unikaalsed/fd_len_genereeritud).round(5)
   fd_min=ar_tmp[0] ; fd_max=ar_tmp.last
   return fd_kaootilisus,fd_min,fd_max,ar_out
end # fd_fd_fd_ar_amat66rkaos

#------------------------------------------
i_arvujada_max_pikkus=30
6.times do
   puts "\ni_arvujada_max_pikkus == "+i_arvujada_max_pikkus.to_s
   fd_kaootilisus, fd_min,fd_max,ar=fd_fd_fd_ar_amat66rkaos(
   42,i_arvujada_max_pikkus)
   #ar.each do {|fd_x| print(fd_x.to_s+"  " }
   puts "Kaootilisus: "+fd_kaootilisus.to_s
   puts "miinimum: "+fd_min.to_s+"  maksimum: "+fd_max.to_s+"\n"
   i_arvujada_max_pikkus=i_arvujada_max_pikkus*10
end # loop

#-------------------------------------------------
# Konsooliv2ljund:
# ts2@s8lm1:~/tmp$ time ./2013_11_05_amat66rkaos_1.rb
#
# i_arvujada_max_pikkus == 30
# Kaootilisus: 0.84848
# miinimum: 1.0  maksimum: 3.7355932
#
#
# i_arvujada_max_pikkus == 300
# Kaootilisus: 0.9835
# miinimum: 1.0  maksimum: 3.7362296
#
#
# i_arvujada_max_pikkus == 3000
# Kaootilisus: 0.99833
# miinimum: 1.0  maksimum: 3.736279
#
#
# i_arvujada_max_pikkus == 30000
# Kaootilisus: 0.99903
# miinimum: 1.0  maksimum: 3.736279
#
#
# i_arvujada_max_pikkus == 300000
# Kaootilisus: 0.94886
# miinimum: 1.0  maksimum: 3.7362791
#
#
# i_arvujada_max_pikkus == 3000000
# Kaootilisus: 0.09489
# miinimum: 1.0  maksimum: 3.7362791
#
#
# real	0m31.445s
# user	0m31.242s
# sys	0m0.108s
# ts2@s8lm1:~/tmp$
#

#==========================================================================

