Jump To …

src/seeds/

lagged_fibonnacci.coffee


          
class LaggedFibonnacci
  constructor: (seed=0) ->
    @plantSeed seed

  get: ->
    uni = @u[@i97] - @u[@j97]
    uni += 1.0 if uni < 0.0

    @u[@i97] = uni

    @i97 = 96 if --@i97 < 0
    @j97 = 96 if --@j97 < 0
    @c -= @cd
    @c += @cm if @c < 0.0
    uni -= @c
    uni += 1.0 if uni < 0.0
    uni

  plantSeed:(seed=0) ->
    @u = new Array 97
    ij = seed / 30082
    kl = seed - 30082 * ij

    i = ((ij / 177) % 177) + 2
    j = (ij % 177) + 2
    k = ((kl / 169) % 178) + 1
    l = kl % 169

    for ii in [0..96]
      [s,t] = [0.0, 0.5]

      for jj in [0..23]
        m = (((i * j) % 179) * k) % 179
        [i,j,k] = [j,k,m]
        l = (53 * l + 1) % 169
        s += t if (l * m) % 64 >= 32
        t *= 0.5

      @u[ii] = s

    @c = 362436.0 / 16777216.0
    @cd = 7654321.0 / 16777216.0
    @cm = 16777213.0 / 16777216.0
    @i97 = 96
    @j97 = 32

module.exports = LaggedFibonnacci