topical media & game development

talk show tell print

mobile-query-three-docs-symbols-src-plugins-js-mathrandomseedable.js.htm / htm



  <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
          .KEYW {color: #933;}
          .COMM {color: #bbb; font-style: italic;}
          .NUMB {color: #393;}
          .STRN {color: #393;}
          .REGX {color: #339;}
          .line {border-right: 1px dotted #666; color: #666; font-style: normal;}
          </style></head><body><pre><span class='line'>  1</span> <span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>  2</span> 
  <span class='line'>  3</span> </span><span class="COMM">/*
  <span class='line'>  4</span>   I've wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace
  <span class='line'>  5</span>   so it's better encapsulated. Now you can have multiple random number generators
  <span class='line'>  6</span>   and they won't stomp all over eachother's state.
  <span class='line'>  7</span>   
  <span class='line'>  8</span>   If you want to use this as a substitute for Math.random(), use the random()
  <span class='line'>  9</span>   method like so:
  <span class='line'> 10</span>   
  <span class='line'> 11</span>   var m = new MersenneTwister();
  <span class='line'> 12</span>   var randomNumber = m.random();
  <span class='line'> 13</span>   
  <span class='line'> 14</span>   You can also call the other genrand_{foo}() methods on the instance.
  <span class='line'> 15</span> 
  <span class='line'> 16</span>   If you want to use a specific seed in order to get a repeatable random
  <span class='line'> 17</span>   sequence, pass an integer into the constructor:
  <span class='line'> 18</span> 
  <span class='line'> 19</span>   var m = new MersenneTwister(123);
  <span class='line'> 20</span> 
  <span class='line'> 21</span>   and that will always produce the same random sequence.
  <span class='line'> 22</span> 
  <span class='line'> 23</span>   Sean McCullough (banksean@gmail.com)
  <span class='line'> 24</span> */</span><span class="WHIT">
  <span class='line'> 25</span> 
  <span class='line'> 26</span> </span><span class="COMM">/* 
  <span class='line'> 27</span>    A C-program for MT19937, with initialization improved 2002/1/26.
  <span class='line'> 28</span>    Coded by Takuji Nishimura and Makoto Matsumoto.
  <span class='line'> 29</span>  
  <span class='line'> 30</span>    Before using, initialize the state by using init_genrand(seed)  
  <span class='line'> 31</span>    or init_by_array(init_key, key_length).
  <span class='line'> 32</span>  
  <span class='line'> 33</span>    Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
  <span class='line'> 34</span>    All rights reserved.                          
  <span class='line'> 35</span>  
  <span class='line'> 36</span>    Redistribution and use in source and binary forms, with or without
  <span class='line'> 37</span>    modification, are permitted provided that the following conditions
  <span class='line'> 38</span>    are met:
  <span class='line'> 39</span>  
  <span class='line'> 40</span>      1. Redistributions of source code must retain the above copyright
  <span class='line'> 41</span>         notice, this list of conditions and the following disclaimer.
  <span class='line'> 42</span>  
  <span class='line'> 43</span>      2. Redistributions in binary form must reproduce the above copyright
  <span class='line'> 44</span>         notice, this list of conditions and the following disclaimer in the
  <span class='line'> 45</span>         documentation and/or other materials provided with the distribution.
  <span class='line'> 46</span>  
  <span class='line'> 47</span>      3. The names of its contributors may not be used to endorse or promote 
  <span class='line'> 48</span>         products derived from this software without specific prior written 
  <span class='line'> 49</span>         permission.
  <span class='line'> 50</span>  
  <span class='line'> 51</span>    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  <span class='line'> 52</span>    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  <span class='line'> 53</span>    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  <span class='line'> 54</span>    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  <span class='line'> 55</span>    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  <span class='line'> 56</span>    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  <span class='line'> 57</span>    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  <span class='line'> 58</span>    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  <span class='line'> 59</span>    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  <span class='line'> 60</span>    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  <span class='line'> 61</span>    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  <span class='line'> 62</span>  
  <span class='line'> 63</span>  
  <span class='line'> 64</span>    Any feedback is very welcome.
  <span class='line'> 65</span>    http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
   class='line'> 66</span>    email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
  <span class='line'> 67</span> */</span><span class="WHIT">
  <span class='line'> 68</span> 
  <span class='line'> 69</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">MersenneTwister</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">seed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'> 70</span> </span><span class="WHIT">  </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">seed</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'> 71</span> </span><span class="WHIT">    </span><span class="NAME">seed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'> 72</span> </span><span class="WHIT">  </span><span class="PUNC">}</span><span class="WHIT"> 
  <span class='line'> 73</span>   </span><span class="COMM">/* Period parameters */</span><span class="WHIT">  
  <span class='line'> 74</span>   </span><span class="NAME">this.N</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">624</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'> 75</span> </span><span class="WHIT">  </span><span class="NAME">this.M</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">397</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'> 76</span> </span><span class="WHIT">  </span><span class="NAME">this.MATRIX_A</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x9908b0df</span><span class="PUNC">;</span><span class="WHIT">   </span><span class="COMM">/* constant vector a */</span><span class="WHIT">
  <span class='line'> 77</span> </span><span class="WHIT">  </span><span class="NAME">this.UPPER_MASK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x80000000</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* most significant w-r bits */</span><span class="WHIT">
  <span class='line'> 78</span> </span><span class="WHIT">  </span><span class="NAME">this.LOWER_MASK</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x7fffffff</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* least significant r bits */</span><span class="WHIT">
  <span class='line'> 79</span> </span><span class="WHIT"> 
  <span class='line'> 80</span>   </span><span class="NAME">this.mt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="NAME">this.N</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* the array for the state vector */</span><span class="WHIT">
  <span class='line'> 81</span> </span><span class="WHIT">  </span><span class="NAME">this.mti</span><span class="PUNC">=</span><span class="NAME">this.N</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* mti==N+1 means mt[N] is not initialized */</span><span class="WHIT">
  <span class='line'> 82</span> 
  <span class='line'> 83</span> </span><span class="WHIT">  </span><span class="NAME">this.init_genrand</span><span class="PUNC">(</span><span class="NAME">seed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'> 84</span> </span><span class="PUNC">}</span><span class="WHIT">  
  <span class='line'> 85</span>  
  <span class='line'> 86</span> </span><span class="COMM">/* initializes mt[N] with a seed */</span><span class="WHIT">
  <span class='line'> 87</span> </span><span class="NAME">MersenneTwister.prototype.init_genrand</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'> 88</span> </span><span class="WHIT">  </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'> 89</span> </span><span class="WHIT">  </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mti</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">this.mti</span><span class="PUNC">&lt;</span><span class="NAME">this.N</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">this.mti</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'> 90</span> </span><span class="WHIT">      </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.mti</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.mti</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">30</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'> 91</span> </span><span class="WHIT">   </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.mti</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xffff0000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">1812433253</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x0000ffff</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">1812433253</span><span class="PUNC">)</span><span class="WHIT">
  <span class='line'> 92</span> </span><span class="WHIT">  </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">this.mti</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'> 93</span> </span><span class="WHIT">      </span><span class="COMM">/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */</span><span class="WHIT">
  <span class='line'> 94</span> </span><span class="WHIT">      </span><span class="COMM">/* In the previous versions, MSBs of the seed affect   */</span><span class="WHIT">
  <span class='line'> 95</span> </span><span class="WHIT">      </span><span class="COMM">/* only MSBs of the array mt[].                        */</span><span class="WHIT">
  <span class='line'> 96</span> </span><span class="WHIT">      </span><span class="COMM">/* 2002/01/09 modified by Makoto Matsumoto             */</span><span class="WHIT">
  <span class='line'> 97</span> </span><span class="WHIT">      </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.mti</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'> 98</span> </span><span class="WHIT">      </span><span class="COMM">/* for >32 bit machines */</span><span class="WHIT">
  <span class='line'> 99</span> </span><span class="WHIT">  </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>100</span> </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>101</span> </span><span class="WHIT"> 
  <span class='line'>102</span> </span><span class="COMM">/* initialize by an array with array-length */</span><span class="WHIT">
  <span class='line'>103</span> </span><span class="COMM">/* init_key is the array for initializing keys */</span><span class="WHIT">
  <span class='line'>104</span> </span><span class="COMM">/* key_length is its length */</span><span class="WHIT">
  <span class='line'>105</span> </span><span class="COMM">/* slight change for C++, 2004/2/26 */</span><span class="WHIT">
  <span class='line'>106</span> </span><span class="NAME">MersenneTwister.prototype.init_by_array</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">init_key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">key_length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>107</span> </span><span class="WHIT">  </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>108</span> </span><span class="WHIT">  </span><span class="NAME">this.init_genrand</span><span class="PUNC">(</span><span class="NUMB">19650218</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>109</span> </span><span class="WHIT">  </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>110</span> </span><span class="WHIT">  </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.N</span><span class="PUNC">></span><span class="NAME">key_length</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this.N</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">key_length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>111</span> </span><span class="WHIT">  </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>112</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">30</span><span class="PUNC">)</span><span class="WHIT">
  <span class='line'>113</span> </span><span class="WHIT">    </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xffff0000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">1664525</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x0000ffff</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">1664525</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
  <span class='line'>114</span> </span><span class="WHIT">      </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">init_key</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* non linear */</span><span class="WHIT">
  <span class='line'>115</span> </span><span class="WHIT">    </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* for WORDSIZE > 32 machines */</span><span class="WHIT">
  <span class='line'>116</span> </span><span class="WHIT">    </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>117</span> </span><span class="WHIT">    </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">>=</span><span class="NAME">this.N</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.N</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>118</span> </span><span class="WHIT">    </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">>=</span><span class="NAME">key_length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>119</span> </span><span class="WHIT">  </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>120</span> </span><span class="WHIT">  </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">=</span><span class="NAME">this.N</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">--</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>121</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">30</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>122</span> </span><span class="WHIT">    </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xffff0000</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">1566083941</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x0000ffff</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">1566083941</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
  <span class='line'>123</span> </span><span class="WHIT">      </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* non linear */</span><span class="WHIT">
  <span class='line'>124</span> </span><span class="WHIT">    </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* for WORDSIZE > 32 machines */</span><span class="WHIT">
  <span class='line'>125</span> </span><span class="WHIT">    </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>126</span> </span><span class="WHIT">    </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">>=</span><span class="NAME">this.N</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.N</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>127</span> </span><span class="WHIT">  </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>128</span> 
  <span class='line'>129</span> </span><span class="WHIT">  </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0x80000000</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* MSB is 1; assuring non-zero initial array */</span><span class="WHIT"> 
  <span class='line'>130</span> </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>131</span> </span><span class="WHIT"> 
  <span class='line'>132</span> </span><span class="COMM">/* generates a random number on [0,0xffffffff]-interval */</span><span class="WHIT">
  <span class='line'>133</span> </span><span class="NAME">MersenneTwister.prototype.genrand_int32</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>134</span> </span><span class="WHIT">  </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>135</span> </span><span class="WHIT">  </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">mag01</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">(</span><span class="NUMB">0x0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.MATRIX_A</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>136</span> </span><span class="WHIT">  </span><span class="COMM">/* mag01[x] = x * MATRIX_A  for x=0,1 */</span><span class="WHIT">
  <span class='line'>137</span> 
  <span class='line'>138</span> </span><span class="WHIT">  </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mti</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.N</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">/* generate N words at one time */</span><span class="WHIT">
  <span class='line'>139</span> </span><span class="WHIT">    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">kk</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>140</span> 
  <span class='line'>141</span> </span><span class="WHIT">    </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mti</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">this.N</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT">   </span><span class="COMM">/* if init_genrand() has not been called, */</span><span class="WHIT">
  <span class='line'>142</span> </span><span class="WHIT">      </span><span class="NAME">this.init_genrand</span><span class="PUNC">(</span><span class="NUMB">5489</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">/* a default initial seed is used */</span><span class="WHIT">
  <span class='line'>143</span> 
  <span class='line'>144</span> </span><span class="WHIT">    </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">kk</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="NAME">kk</span><span class="PUNC">&lt;</span><span class="NAME">this.N</span><span class="PUNC">-</span><span class="NAME">this.M</span><span class="PUNC">;</span><span class="NAME">kk</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>145</span> </span><span class="WHIT">      </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">kk</span><span class="PUNC">]</span><span class="PUNC">&</span><span class="NAME">this.UPPER_MASK</span><span class="PUNC">)</span><span class="PUNC">|</span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">kk</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">&</span><span class="NAME">this.LOWER_MASK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>146</span> </span><span class="WHIT">      </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">kk</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">kk</span><span class="PUNC">+</span><span class="NAME">this.M</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="NAME">mag01</span><span class="PUNC">[</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>147</span> </span><span class="WHIT">    </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>148</span> </span><span class="WHIT">    </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">;</span><span class="NAME">kk</span><span class="PUNC">&lt;</span><span class="NAME">this.N</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="NAME">kk</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>149</span> </span><span class="WHIT">      </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">kk</span><span class="PUNC">]</span><span class="PUNC">&</span><span class="NAME">this.UPPER_MASK</span><span class="PUNC">)</span><span class="PUNC">|</span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">kk</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">&</span><span class="NAME">this.LOWER_MASK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>150</span> </span><span class="WHIT">      </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">kk</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">kk</span><span class="PUNC">+</span><span class="PUNC">(</span><span class="NAME">this.M</span><span class="PUNC">-</span><span class="NAME">this.N</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="NAME">mag01</span><span class="PUNC">[</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>151</span> </span><span class="WHIT">    </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>152</span> </span><span class="WHIT">    </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.N</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">&</span><span class="NAME">this.UPPER_MASK</span><span class="PUNC">)</span><span class="PUNC">|</span><span class="PUNC">(</span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">&</span><span class="NAME">this.LOWER_MASK</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>153</span> </span><span class="WHIT">    </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.N</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.M</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="WHIT"> </span><span class="NAME">mag01</span><span class="PUNC">[</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>154</span> 
  <span class='line'>155</span> </span><span class="WHIT">    </span><span class="NAME">this.mti</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>156</span> </span><span class="WHIT">  </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>157</span> 
  <span class='line'>158</span> </span><span class="WHIT">  </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.mt</span><span class="PUNC">[</span><span class="NAME">this.mti</span><span class="PUNC">++</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>159</span> 
  <span class='line'>160</span> </span><span class="WHIT">  </span><span class="COMM">/* Tempering */</span><span class="WHIT">
  <span class='line'>161</span> </span><span class="WHIT">  </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">11</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>162</span> </span><span class="WHIT">  </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">7</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x9d2c5680</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>163</span> </span><span class="WHIT">  </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">&lt;&lt;</span><span class="WHIT"> </span><span class="NUMB">15</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xefc60000</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>164</span> </span><span class="WHIT">  </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">^</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">18</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>165</span> 
  <span class='line'>166</span> </span><span class="WHIT">  </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">>>></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>167</span> </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>168</span> </span><span class="WHIT"> 
  <span class='line'>169</span> </span><span class="COMM">/* generates a random number on [0,0x7fffffff]-interval */</span><span class="WHIT">
  <span class='line'>170</span> </span><span class="NAME">MersenneTwister.prototype.genrand_int31</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>171</span> </span><span class="WHIT">  </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.genrand_int32</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">>>></span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
  <span class='line'>172</span> </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>173</span> </span><span class="WHIT"> 
  <span class='line'>174</span> </span><span class="COMM">/* generates a random number on [0,1]-real-interval */</span><span class="WHIT">
  <span class='line'>175</span> </span><span class="NAME">MersenneTwister.prototype.genrand_real1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>176</span> </span><span class="WHIT">  </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.genrand_int32</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">*</span><span class="PUNC">(</span><span class="NUMB">1.0</span><span class="PUNC">/</span><span class="NUMB">4294967295.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> 
  <span class='line'>177</span>   </span><span class="COMM">/* divided by 2^32-1 */</span><span class="WHIT"> 
  <span class='line'>178</span> </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>179</span> 
  <span class='line'>180</span> </span><span class="COMM">/* generates a random number on [0,1)-real-interval */</span><span class="WHIT">
  <span class='line'>181</span> </span><span class="NAME">MersenneTwister.prototype.random</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>182</span> </span><span class="WHIT">  </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.genrand_int32</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">*</span><span class="PUNC">(</span><span class="NUMB">1.0</span><span class="PUNC">/</span><span class="NUMB">4294967296.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> 
  <span class='line'>183</span>   </span><span class="COMM">/* divided by 2^32 */</span><span class="WHIT">
  <span class='line'>184</span> </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>185</span> </span><span class="WHIT"> 
  <span class='line'>186</span> </span><span class="COMM">/* generates a random number on (0,1)-real-interval */</span><span class="WHIT">
  <span class='line'>187</span> </span><span class="NAME">MersenneTwister.prototype.genrand_real3</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
  <span class='line'>188</span> </span><span class="WHIT">  </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.genrand_int32</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">)</span><span class="PUNC">*</span><span class="PUNC">(</span><span class="NUMB">1.0</span><span class="PUNC">/</span><span class="NUMB">4294967296.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> 
  <span class='line'>189</span>   </span><span class="COMM">/* divided by 2^32 */</span><span class="WHIT">
  <span class='line'>190</span> </span><span class="PUNC">}</span><span class="WHIT">
  <span class='line'>191</span> </span><span class="WHIT"> 
  <span class='line'>192</span> </span><span class="COMM">/* generates a random number on [0,1) with 53-bit resolution*/</span><span class="WHIT">
  <span class='line'>193</span> </span><span class="NAME">MersenneTwister.prototype.genrand_res53</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> 
  <span class='line'>194</span>   </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">=</span><span class="NAME">this.genrand_int32</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">>>></span><span class="NUMB">5</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">=</span><span class="NAME">this.genrand_int32</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">>>></span><span class="NUMB">6</span><span class="PUNC">;</span><span class="WHIT"> 
  <span class='line'>195</span>   </span><span class="KEYW">return</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">*</span><span class="NUMB">67108864.0</span><span class="PUNC">+</span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">*</span><span class="PUNC">(</span><span class="NUMB">1.0</span><span class="PUNC">/</span><span class="NUMB">9007199254740992.0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> 
  <span class='line'>196</span> </span><span class="PUNC">}</span><span class="WHIT"> 
  <span class='line'>197</span> 
  <span class='line'>198</span> </span><span class="COMM">/* These real versions are due to Isaku Wada, 2002/01/09 added */</span><span class="WHIT">
  <span class='line'>199</span> 
  <span class='line'>200</span> 
  <span class='line'>201</span> </span><span class="COMM">
////////////////////////////////////////////////////////////////////////////

<span class='line'>202</span> </span><span class="COMM">// //</span><span class="WHIT"> <span class='line'>203</span> </span><span class="COMM">
////////////////////////////////////////////////////////////////////////////

<span class='line'>204</span> <span class='line'>205</span> </span><span class="WHIT"> </span><span class="COMM">// from
gist.github.com/300494</span><span class="WHIT"> <span class='line'>206</span> </span><span class="WHIT"> </span><span class="NAME">Math.random</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">instance.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>207</span> </span><span class="WHIT"> </span><span class="NAME">Math.seed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>208</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">value</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> <span class='line'>209</span> </span><span class="WHIT"> </span><span class="NAME">seed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>210</span> </span><span class="WHIT"> </span><span class="NAME">instance.init_genrand</span><span class="PUNC">(</span><span class="NAME">seed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>211</span> </span><span class="WHIT"> </span><span class="NAME">console.log</span><span class="PUNC">(</span><span class="STRN">"Math.random seed"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">seed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>212</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> <span class='line'>213</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">seed</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>214</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>215</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">instance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">MersenneTwister</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>216</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">seed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.seed</span><span class="PUNC">(</span><span class="NAME">Date.now</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> <span class='line'>217</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> <span class='line'>218</span> </span></pre></body></html>


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.