Subtractive generator: Difference between revisions
Content added Content deleted
m (→{{header|Haskell}}: Applied hindent, added type signatures) |
Walterpachl (talk | contribs) (add ooRexx (translated from REXX) |
||
Line 1,195: | Line 1,195: | ||
506003769 |
506003769 |
||
380969305</pre> |
380969305</pre> |
||
=={{header|ooREXX}}== |
|||
{{trans|REXX}} |
|||
<lang oorexx>/*REXX program uses a subtractive generaTor,and creates a sequence of ranDom numbers. */ |
|||
/* array index must be positive! */ |
|||
s=.array~new |
|||
r=.array~new |
|||
s[1]=292929 |
|||
s[2]=1 |
|||
billion=1e9 |
|||
numeric digits 20 |
|||
ci=55 |
|||
Do i=2 To ci-1 |
|||
s[i+1]=mod(s[i-1]-s[i],billion) |
|||
End |
|||
cp=34 |
|||
Do j=0 To ci-1 |
|||
r[j+1]=s[mod(cp*(j+1),ci)+1] |
|||
End |
|||
m=219 |
|||
cj= 24 |
|||
Do k=ci To m |
|||
_=k//ci |
|||
r[_+1]=mod(r[mod(k-ci,ci)+1]-r[mod(k-cj,ci)+1],billion) |
|||
End |
|||
t=235 |
|||
Do n=m+1 To t |
|||
_=n//ci |
|||
r[_+1]=mod(r[mod(n-ci,ci)+1]-r[mod(n-cj,ci)+1],billion) |
|||
Say right(r[_+1],40) |
|||
End |
|||
Exit |
|||
mod: Procedure |
|||
Parse Arg a,b |
|||
Return ((a//b)+b)//b </lang> |
|||
{{out|output|text= when using the default input:}} |
|||
<pre>same as with REXX</pre> |
|||
=={{header|PARI/GP}}== |
=={{header|PARI/GP}}== |
||
Line 1,574: | Line 1,611: | ||
(define rand (create-substractive-generator 292929)) |
(define rand (create-substractive-generator 292929)) |
||
(build-list 3 (lambda (_) (rand))) ;returns a list made from the 3 wanted numbers</lang> |
(build-list 3 (lambda (_) (rand))) ;returns a list made from the 3 wanted numbers</lang> |
||
=={{header|REXX}}== |
=={{header|REXX}}== |
||
{{trans|PL/I}} |
{{trans|PL/I}} |
||
<lang rexx>/*REXX program uses a subtractive generator, and creates a sequence of random numbers. */ |
<lang rexx>/*REXX program uses a subtractive generator, and creates a sequence of random numbers. */ |
||
s.0= 292929; s.1= 1; billion= 1e9 /* ◄────────┐ */ |
s.0= 292929; s.1= 1; billion= 1e9 /* ◄────────┐ */ |
||
Line 1,589: | Line 1,628: | ||
do k=cI to m; _= k // cI |
do k=cI to m; _= k // cI |
||
r._= mod( r( mod(k-cI, cI)) - r( mod(k-cJ, cI)), billion) |
r._= mod( r( mod(k-cI, cI)) - r( mod(k-cJ, cI)), billion) |
||
end /* |
end /*k*/ |
||
t= 235 |
t= 235 |
||
do n=m+1 to t; _= n // cI |
do n=m+1 to t; _= n // cI |