summary refs log tree commit diff stats
path: root/doc/readme.txt
Commit message (Expand)AuthorAgeFilesLines
* doc: Trim .txt files trailing whitespaceAdam Strzelecki2015-09-041-7/+7
* Nimrod renamed to NimAraq2014-08-281-2/+2
* Removes executable bit for text files.Grzegorz Adam Hankiewicz2013-03-161-0/+0
* fixed pango/pangoutils new wrappersAndreas Rumpf2010-02-261-0/+0
* continued work on html/xmlparserrumpf_a@web.de2010-02-141-0/+0
* added tools and web dirsAndreas Rumpf2009-09-151-0/+0
* too many changes to listAndreas Rumpf2008-08-231-5/+1
* first releaseRumpf2008-06-231-0/+0
* Initial importAndreas Rumpf2008-06-221-0/+11
ng/Nim/commit/lib/pure/mersenne.nim?h=devel&id=11b69587554a99deb93ca2447ee3aeeacdb647c5'>11b695875 ^
7832f25ab ^





11b695875 ^
7832f25ab ^









7832f25ab ^
32109a786 ^
7832f25ab ^


11b695875 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    
                           


                             

                                                   
                                                      




                                                                                         
                                              





                                                                                   
                                           









                                               
      
                                           


                                   
                  
type
  MersenneTwister* = object
    mt: array[0..623, uint32]
    index: int

{.deprecated: [TMersenneTwister: MersenneTwister].}

proc newMersenneTwister*(seed: int): MersenneTwister =
  result.index = 0
  result.mt[0]= uint32(seed)
  for i in 1..623'u32:
    result.mt[i]= (0x6c078965'u32 * (result.mt[i-1] xor (result.mt[i-1] shr 30'u32)) + i)

proc generateNumbers(m: var MersenneTwister) =
  for i in 0..623:
    var y = (m.mt[i] and 0x80000000'u32) + (m.mt[(i+1) mod 624] and 0x7fffffff'u32)
    m.mt[i] = m.mt[(i+397) mod 624] xor uint32(y shr 1'u32)
    if (y mod 2'u32) != 0:
     m.mt[i] = m.mt[i] xor 0x9908b0df'u32

proc getNum*(m: var MersenneTwister): int =
  if m.index == 0:
    generateNumbers(m)
  var y = m.mt[m.index]
  y = y xor (y shr 11'u32)
  y = y xor ((7'u32 shl y) and 0x9d2c5680'u32)
  y = y xor ((15'u32 shl y) and 0xefc60000'u32)
  y = y xor (y shr 18'u32)
  m.index = (m.index+1) mod 624
  return int(y)

# Test
when not defined(testing) and isMainModule:
  var mt = newMersenneTwister(2525)

  for i in 0..99:
    echo mt.getNum