chancejs
Version:
Various pseudo-random implementations packaged with helpful random utilities
93 lines (83 loc) • 8.17 kB
HTML
<html>
<meta charset='utf-8'>
<title>src/seeds/mersenne_twister.coffee</title>
<head>
<link rel='stylesheet' media='all' href='docco.css'>
<link href='http://fonts.googleapis.com/css?family=Lato:300' rel='stylesheet' type='text/css'>
<script src='http://code.jquery.com/jquery-1.6.2.min.js' type='text/javascript' charset='utf-8'></script>
<script src='docco.js' type='text/javascript' charset='utf-8'></script>
<script>
$(document).ready(function(){
$('#menu').columnview();
$('#jump_show').click(function(){
$('#jump_to').toggleClass('visible')
})
var p = "src/seeds/mersenne_twister.coffee".split('/')
var f = p.pop()
for(var i=0;i<p.length;i++){
var s = p[i] + "/"
$("#jump_page div a span.label").filter(function(){
return $(this).text() == s
}).parent().click()
}
$("#jump_page div a span.label").filter(function(){
return $(this).text() == f
}).last().parent().toggleClass('active')
})
</script>
</head>
<body>
<div id='container'>
<div id='jump_to'><div id='jump_page'>
<ul class='menu' id='menu'>
<li class='leaf'><a href='#'>src/</a><ul class='menu'><li class='leaf'><a href='src_random.html'>random.coffee</a></li><li class='leaf'><a href='#'>seeds/</a><ul class='menu'><li class='leaf'><a href='src_seeds_lagged_fibonnacci.html'>lagged_fibonnacci.coffee</a></li><li class='leaf'><a href='src_seeds_linear.html'>linear.coffee</a></li><li class='leaf'><a href='src_seeds_linear_congruential.html'>linear_congruential.coffee</a></li><li class='leaf'><a href='src_seeds_math_random.html'>math_random.coffee</a></li><li class='leaf'><a href='src_seeds_mersenne_twister.html'>mersenne_twister.coffee</a></li><li class='leaf'><a href='src_seeds_no_random.html'>no_random.coffee</a></li></ul></li></ul></li>
</ul>
</div>
<div id='jump_show'>
Jump To …
</div></div>
<table cellpadding='0' cellspacing='0'>
<tr>
<th class='docs'>
<h3>src/seeds/</h3>
<h1>mersenne_twister.coffee</h1>
</th>
<th class='code'>
<pre></pre>
</th>
</tr>
<tr>
<td class='docs'></td>
<td class='code'><div class="highlight"><pre><span class="k">class</span> <span class="nb">MersenneTwister</span>
<span class="py">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nv">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> <span class="o">-></span>
<span class="py">@mt</span> <span class="o">=</span> <span class="nb">Array</span> <span class="mi">623</span>
<span class="py">@z</span> <span class="o">=</span> <span class="mi">0</span>
<span class="py">@y</span> <span class="o">=</span> <span class="mi">0</span>
<span class="py">@plantSeed</span> <span class="nx">seed</span>
<span class="py">plantSeed</span><span class="o">:</span> <span class="p">(</span><span class="nv">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> <span class="o">-></span>
<span class="py">@mt</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nx">seed</span>
<span class="py">@mt</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">((</span><span class="mh">0x10dcd</span> <span class="o">*</span> <span class="py">@mt</span><span class="p">[</span><span class="nx">i</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">&</span> <span class="mh">0xFFFFFFFF</span> <span class="k">for</span> <span class="nx">i</span> <span class="k">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">..</span><span class="mi">623</span><span class="p">]</span>
<span class="py">get</span><span class="o">:</span> <span class="o">-></span>
<span class="py">@generateNumbers</span><span class="p">()</span> <span class="k">if</span> <span class="py">@z</span> <span class="o">>=</span> <span class="mi">623</span>
<span class="py">@extractNumber</span><span class="p">(</span><span class="py">@z</span><span class="o">++</span><span class="p">)</span> <span class="o">/</span> <span class="mh">0x80000000</span>
<span class="py">generateNumbers</span><span class="o">:</span> <span class="o">-></span>
<span class="py">@z</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="nx">i</span> <span class="k">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">..</span><span class="mi">623</span><span class="p">]</span>
<span class="py">@y</span> <span class="o">=</span> <span class="mh">0x80000000</span> <span class="o">&</span> <span class="py">@mt</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">+</span> <span class="mh">0x7FFFFFFF</span> <span class="o">&</span> <span class="p">(</span><span class="py">@mt</span><span class="p">[(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">623</span><span class="p">])</span>
<span class="k">if</span> <span class="py">@y</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">is</span> <span class="mi">0</span>
<span class="py">@mt</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="py">@mt</span><span class="p">[(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">397</span><span class="p">)</span> <span class="o">%</span> <span class="mi">623</span><span class="p">]</span> <span class="o">^</span> <span class="p">(</span><span class="py">@y</span> <span class="o">>></span> <span class="mi">1</span><span class="p">)</span>
<span class="k">else</span>
<span class="py">@mt</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="py">@mt</span><span class="p">[(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">397</span><span class="p">)</span> <span class="o">%</span> <span class="mi">623</span><span class="p">]</span> <span class="o">^</span> <span class="p">(</span><span class="py">@y</span> <span class="o">>></span> <span class="mi">1</span><span class="p">)</span> <span class="o">^</span> <span class="mh">0x9908B0DF</span>
<span class="py">extractNumber</span><span class="o">:</span> <span class="p">(</span><span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
<span class="py">@y</span> <span class="o">=</span> <span class="py">@mt</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span>
<span class="py">@y</span> <span class="o">^=</span> <span class="p">(</span><span class="py">@y</span> <span class="o">>></span> <span class="mi">11</span><span class="p">)</span>
<span class="py">@y</span> <span class="o">^=</span> <span class="p">(</span><span class="py">@y</span> <span class="o"><<</span> <span class="mi">7</span><span class="p">)</span> <span class="o">&</span> <span class="mh">0x9d2c5680</span>
<span class="py">@y</span> <span class="o">^=</span> <span class="p">(</span><span class="py">@y</span> <span class="o"><<</span> <span class="mi">15</span><span class="p">)</span> <span class="o">&</span> <span class="mh">0xefc60000</span>
<span class="py">@y</span> <span class="o">^=</span> <span class="p">(</span><span class="py">@y</span> <span class="o">>></span> <span class="mi">18</span><span class="p">)</span>
<span class="nv">module.exports </span><span class="o">=</span> <span class="nb">MersenneTwister</span>
</pre></div></td>
</tr>
</table>
</div>
</body>
</html>