Linear congruential generator: Difference between revisions
Content added Content deleted
(→{{header|jq}}: discuss gojq) |
(Added Easylang) |
||
Line 1,162: | Line 1,162: | ||
35439 |
35439 |
||
</pre> |
</pre> |
||
=={{header|EasyLang}}== |
|||
<syntaxhighlight> |
|||
func mul32 a b . |
|||
# to avoid overflow with 53bit integer precision with double |
|||
ah = a div 0x10000 |
|||
al = a mod 0x10000 |
|||
bh = b div 0x10000 |
|||
bl = b mod 0x10000 |
|||
return al * bl + al * bh * 0x10000 + bl * ah * 0x10000 |
|||
. |
|||
global state_bsd state_ms . |
|||
func rand_bsd . |
|||
state_bsd = (mul32 1103515245 state_bsd + 12345) mod 0x80000000 |
|||
return state_bsd |
|||
. |
|||
func rand_ms . |
|||
state_ms = (214013 * state_ms + 2531011) mod 0x80000000 |
|||
return state_ms div 0x10000 |
|||
. |
|||
for i = 1 to 5 |
|||
print rand_bsd |
|||
. |
|||
print "" |
|||
for i = 1 to 5 |
|||
print rand_ms |
|||
. |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
12345 |
|||
1406932606 |
|||
654583775 |
|||
1449466924 |
|||
229283573 |
|||
38 |
|||
7719 |
|||
21238 |
|||
2437 |
|||
8855 |
|||
</pre> |
|||
=={{header|EDSAC order code}}== |
=={{header|EDSAC order code}}== |
||
The first version of this solution had trouble with the "sandwich digit". As pointed out by Wilkes, Wheeler & Gill (1951 edition, page 26), a 35-bit constant cannot be loaded via pseudo-orders if the middle bit (sandwich digit) is 1. One workaround, adopted in the EDSAC solution to the Babbage Problem, is to use the negative of the constant instead. The alternative, which WWG evidently preferred and which is used in the LCG solution posted here, is to load 35-bit constants via the library subroutine R9. |
The first version of this solution had trouble with the "sandwich digit". As pointed out by Wilkes, Wheeler & Gill (1951 edition, page 26), a 35-bit constant cannot be loaded via pseudo-orders if the middle bit (sandwich digit) is 1. One workaround, adopted in the EDSAC solution to the Babbage Problem, is to use the negative of the constant instead. The alternative, which WWG evidently preferred and which is used in the LCG solution posted here, is to load 35-bit constants via the library subroutine R9. |