[PDD] Add docs for the Parrot_PMC_push_* and Parrot_PMC_pop_* functions
[parrot.git] / examples / shootout / random.pasm
blob37ad477e2b7ae41eea2402ea5706293e1f0942c7
1 #!./parrot -R jit
2 # Copyright (C) 2005-2009, Parrot Foundation.
3 # $Id$
5 # random.pasm N         (N = 900000 for shootout)
6 # by Joshua Isom
8 # I0 = last
9 # I1 is the counter for the loop
10 # N2 is the argument for gen_random
11 # N3 is the return from gen_random
12 main:
13     new P10, 'ResizableIntegerArray'
14     get_params "0", P0
15     elements I0, P0
16     eq I0, 2, hasargs
17     set I1, 900000
18     branch argsdone
19 hasargs:
20     set S0, P0[1]
21     set I1, S0
22 argsdone:
23     set I0, 42
24     unless I1, ex
25     set N2, 100.0
26 while_1:
27     local_branch P10, gen_random
28     dec I1
29     if I1, while_1
30     new P0, 'FixedFloatArray'
31     set P0, 1
32     set P0[0], N3
33     sprintf S0, "%.9f\n", P0
34     print S0
35 ex:
36     end
38 .macro_const IM 139968
39 .macro_const IA 3877
40 .macro_const IC 29573
42 gen_random:
43     mul I0, .IA
44     add I0, .IC
45     mod I0, .IM
46     set N1, I0
47     mul N3, N2, N1
48     div N3, .IM
49     local_return P10
51 # Local Variables:
52 #   mode: pir
53 #   fill-column: 100
54 # End:
55 # vim: expandtab shiftwidth=4 ft=pir: