<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nsis.sourceforge.io/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Random</id>
	<title>Random - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://nsis.sourceforge.io/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Random"/>
	<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Random&amp;action=history"/>
	<updated>2026-05-12T20:52:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Random&amp;diff=14831&amp;oldid=prev</id>
		<title>Anders: fixed Function Random</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Random&amp;diff=14831&amp;oldid=prev"/>
		<updated>2008-03-07T08:13:50Z</updated>

		<summary type="html">&lt;p&gt;fixed Function Random&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;â† Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:13, 7 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l96&quot;&gt;Line 96:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 96:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         Exch $0&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         Exch $0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     !macroend&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     !macroend&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Function Random&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     Pop $2 ; _MAX&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     Pop $2 ; _MAX&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     Pop $1 ; _MIN&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     Pop $1 ; _MIN&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key n22049_wiki-wiki_:diff::1.12:old-6897:rev-14831 --&gt;
&lt;/table&gt;</summary>
		<author><name>Anders</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Random&amp;diff=6897&amp;oldid=prev</id>
		<title>Nechai at 18:55, 16 July 2005</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Random&amp;diff=6897&amp;oldid=prev"/>
		<updated>2005-07-16T18:55:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{PageAuthor|nechai}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
 Linear Congruential Generator&lt;br /&gt;
 Park, S.K. and K.W. Miller, 1988; Random Number Generators: Good Ones are Hard to Find,&lt;br /&gt;
 Comm. of the ACM, V. 31. No. 10, pp 1192-1201&lt;br /&gt;
 n(k+1) = (a * n(k) + b) mod m&lt;br /&gt;
 m=2147483647, a=16807, b=0 &lt;br /&gt;
 the seed after 10000 iterations should be 1043618065 for n(0)=1&lt;br /&gt;
 http://www.mactech.com/articles/mactech/Vol.08/08.03/RandomNumbers/&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 ${Random} &amp;quot;Seed&amp;quot; &amp;quot;Min&amp;quot; &amp;quot;Max&lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;Seed&amp;quot;     ; Seed value for generator or last generated random number&lt;br /&gt;
 &amp;quot;Min&amp;quot;      ; name of the initialization file&lt;br /&gt;
 &amp;quot;Max&amp;quot;      ; Callback function then found&lt;br /&gt;
 &lt;br /&gt;
 Stack 1    ; Random number between 0x00000000 and 0X7FFFFFFF [0x00000000;0X7FFFFFFF]&lt;br /&gt;
 Stack 2    ; Random number between Min and Max [MIN;MAX]&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
 Do:&lt;br /&gt;
     IntOp $0 $0 + 1&lt;br /&gt;
     ${Random} $1 0 255&lt;br /&gt;
     Pop $1&lt;br /&gt;
     Pop $2&lt;br /&gt;
     StrCmp $0 &amp;quot;10000&amp;quot; 0 Do&lt;br /&gt;
 StrCmp $1 1043618065 0 +2&lt;br /&gt;
     MessageBox MB_OK &amp;quot;Test Minimal Standard Generator o.k.&amp;quot;&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The Function ==&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
Function Random&lt;br /&gt;
; Linear Congruential Generator&lt;br /&gt;
; Park, S.K. and K.W. Miller, 1988; Random Number Generators: Good Ones are Hard to Find,&lt;br /&gt;
; Comm. of the ACM, V. 31. No. 10, pp 1192-1201&lt;br /&gt;
; n(k+1) = (a * n(k) + b) mod m&lt;br /&gt;
; m=2147483647, a=16807, b=0 &lt;br /&gt;
; the seed after 10000 iterations should be 1043618065 for n(0)=1&lt;br /&gt;
; http://www.mactech.com/articles/mactech/Vol.08/08.03/RandomNumbers/&lt;br /&gt;
; &lt;br /&gt;
; Syntax:&lt;br /&gt;
; ${Random} &amp;quot;Seed&amp;quot; &amp;quot;Min&amp;quot; &amp;quot;Max&lt;br /&gt;
; &lt;br /&gt;
; &amp;quot;Seed&amp;quot;     ; Seed value for generator or last generated random number&lt;br /&gt;
; &amp;quot;Min&amp;quot;      ; name of the initialization file&lt;br /&gt;
; &amp;quot;Max&amp;quot;      ; Callback function then found&lt;br /&gt;
; &lt;br /&gt;
; Stack 1    ; Random number between 0x00000000 and 0X7FFFFFFF [0x00000000;0X7FFFFFFF]&lt;br /&gt;
; Stack 2    ; Random number between min and max [MIN;MAX]&lt;br /&gt;
; &lt;br /&gt;
; e.g.&lt;br /&gt;
; Do:&lt;br /&gt;
;     IntOp $0 $0 + 1&lt;br /&gt;
;     ${Random} $1 0 255&lt;br /&gt;
;     Pop $1&lt;br /&gt;
;     Pop $2&lt;br /&gt;
;     StrCmp $0 &amp;quot;10000&amp;quot; 0 Do&lt;br /&gt;
; StrCmp $1 1043618065 0 +2&lt;br /&gt;
;     MessageBox MB_OK &amp;quot;Test Minimal Standard Generator o.k.&amp;quot;&lt;br /&gt;
;&lt;br /&gt;
    !define Random `!insertmacro RandomCall`&lt;br /&gt;
&lt;br /&gt;
    !macro RandomCall _SEED _MIN _MAX&lt;br /&gt;
        ; save global registers&lt;br /&gt;
        Push $0&lt;br /&gt;
        Push $1&lt;br /&gt;
        Push $2&lt;br /&gt;
        Push $3&lt;br /&gt;
        Push $4&lt;br /&gt;
        Push $5&lt;br /&gt;
        Push $6&lt;br /&gt;
        Push $7&lt;br /&gt;
        Push $8&lt;br /&gt;
        Push $9		&lt;br /&gt;
        ; store parameter&lt;br /&gt;
        Push `${_SEED}`&lt;br /&gt;
        Push `${_MIN}`&lt;br /&gt;
        Push `${_MAX}`&lt;br /&gt;
        ; execute function&lt;br /&gt;
	Call Random&lt;br /&gt;
        ; restore global register&lt;br /&gt;
        Pop $9&lt;br /&gt;
        Pop $8&lt;br /&gt;
        Pop $7&lt;br /&gt;
        Pop $6&lt;br /&gt;
        Pop $5&lt;br /&gt;
        Pop $4&lt;br /&gt;
        Pop $3&lt;br /&gt;
        Pop $2&lt;br /&gt;
	Exch $1&lt;br /&gt;
        Exch&lt;br /&gt;
        Exch $0&lt;br /&gt;
    !macroend&lt;br /&gt;
&lt;br /&gt;
    Pop $2 ; _MAX&lt;br /&gt;
    Pop $1 ; _MIN&lt;br /&gt;
    Pop $0 ; _SEED&lt;br /&gt;
&lt;br /&gt;
    ; n(k+1) = (a * n(k) + b) mod m&lt;br /&gt;
    System::Int64Op /NOUNLOAD 16807 * $0&lt;br /&gt;
    Pop $0&lt;br /&gt;
    System::Int64Op /NOUNLOAD $0 + 0&lt;br /&gt;
    Pop $0&lt;br /&gt;
    System::Int64Op /NOUNLOAD $0 % 0X7FFFFFFF&lt;br /&gt;
    Pop $0&lt;br /&gt;
&lt;br /&gt;
    ; calculate value betwenn _MIN _MAX&lt;br /&gt;
    IntOp $3 $2 - $1&lt;br /&gt;
    IntOp $3 $3 + 1&lt;br /&gt;
    System::Int64Op /NOUNLOAD $0 * $3&lt;br /&gt;
    Pop $4&lt;br /&gt;
    System::Int64Op /NOUNLOAD $4 / 0X7FFFFFFF&lt;br /&gt;
    Pop $4&lt;br /&gt;
    IntOp $1 $4 + $1&lt;br /&gt;
&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Math Functions]]&lt;/div&gt;</summary>
		<author><name>Nechai</name></author>
	</entry>
</feed>