Pseudo-random numbers/Middle-square method: Difference between revisions
Pseudo-random numbers/Middle-square method (view source)
Revision as of 13:26, 12 July 2023
, 10 months agoUndo revision 346226 by FreeTom (talk) Undo destructive edit
(Added Tcl version) |
Thundergnat (talk | contribs) Tag: Undo |
||
Line 651:
432883
</pre>
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils,StdCtrls}}
<syntaxhighlight lang="Delphi">
var Seed: int64 = 675248;
function MiddleSquareRandom: int64;
var S: string;
begin
S:=IntToStr(Seed * Seed);
while Length(S)<12 do S:='0'+S;
Seed:=StrToInt(MidStr(S, 4, 6));
Result:=Seed;
end;
procedure ShowMiddleSqrRandom(Memo: TMemo);
var I: integer;
begin
for I:=1 to 5 do
Memo.Lines.Add(IntToStr(MiddleSquareRandom));
end;
</syntaxhighlight>
{{out}}
<pre>
959861
333139
981593
524817
432883
Elapsed Time: 5.610 ms.
</pre>
=={{header|dc}}==
Line 667 ⟶ 705:
global seed .
seed = 675248
strSeed$ = seed
s$ = seed * seed
Line 776 ⟶ 814:
{{out}}
<pre>959861 333139 981593 524817 432883 387691</pre>
=={{header|Java}}==
<syntaxhighlight lang="java">
public final class MiddleSquareTask {
public static void main(String[] aArgs) {
MiddleSquare random = new MiddleSquare(675248);
for ( int i = 0; i < 5; i++ ) {
System.out.println(random.nextInt());
}
}
}
final class MiddleSquare {
public MiddleSquare(int aSeed) {
final int length = String.valueOf(aSeed).length();
if ( length % 2 == 1 ) {
throw new IllegalArgumentException("Seed must have an even number of digits");
}
state = aSeed;
divisor = (int) Math.pow(10, length / 2);
modulus = (int) Math.pow(10, length);
}
public int nextInt() {
state = ( ( state * state ) / divisor ) % modulus;
return (int) state;
}
private long state;
private final int divisor, modulus;
}
</syntaxhighlight>
{{ out }}
<pre>
959861
333139
981593
524817
432883
</pre>
=={{header|jq}}==
Line 825 ⟶ 911:
{{trans|C}}
<syntaxhighlight lang="Scheme">
{def W.fill
{lambda {:v :n}
{if {<= :n 0}
then
else :v{W.fill :v {- :n 1}}}}}
-> W.fill
{def W.pad
{lambda {:n :size}
{if {<= {W.length :n} :size}
then :n{W.fill :size {- :size {W.length :n}}}
else {W.slice 0 {- :size {W.length :n}} :n}}}}
-> W.pad
{def randoms
{lambda {:s :n}
Line 834 ⟶ 934:
-> randoms
{randoms
-> 959861 333139 981593 524817 432883
</syntaxhighlight>
Line 1,090 ⟶ 1,190:
[959861, 333139, 981593, 524817, 432883]
</pre>
=={{header|UNIX Shell}}==
|