[PDD] Add docs for the Parrot_PMC_push_* and Parrot_PMC_pop_* functions
[parrot.git] / examples / shootout / partialsums.pir
blob20a7de83f99f987d3428c2e62d77559bc08fa13f
1 #!./parrot -R cgp
2 # Copyright (C) 2006-2009, Parrot Foundation.
3 # $Id$
5 # partialsums N  (N = 2500000 for shootout)
7 # By Joshua Isom
8 # changed default value to N=25000 (shootout test default) Karl Forner
10 .sub main :main
11         .param pmc argv
12         .local int k, n
13         .local num sum, a
14         .local pmc parray
15         parray = new 'FixedFloatArray'
16         parray = 1
17         $I0 = argv
18         n = 25000
19         unless $I0 == 2 goto argok
20         $S0 = argv[1]
21         n = $S0
22 argok:
24         sum = 0.0
25         $N0 = 2.0 / 3.0
26         k = 0
27 beginfor_0:
28         unless k <= n goto endfor_0
29         $N1 = pow $N0, k
30         sum += $N1
31         inc k
32         goto beginfor_0
33 endfor_0:
34         parray[0] = sum
35         $S0 = sprintf "%.9f\t(2/3)^k\n", parray
36         print $S0
38         sum = 0.0
39         k = 1
40 beginfor_1:
41         unless k <= n goto endfor_1
42         $N1 = sqrt k
43         $N1 = 1.0 / $N1
44         sum += $N1
45         inc k
46         goto beginfor_1
47 endfor_1:
48         parray[0] = sum
49         $S0 = sprintf "%.9f\tk^-0.5\n", parray
50         print $S0
52         sum = 0.0
53         k = 1
54 beginfor_3:
55         unless k <= n goto endfor_3
56         $N1 = k + 1.0
57         $N1 *= k
58         $N1 = 1.0 /$N1
59         sum += $N1
60         inc k
61         goto beginfor_3
62 endfor_3:
63         parray[0] = sum
64         $S0 = sprintf "%.9f\t1/k(k+1)\n", parray
65         print $S0
67         sum = 0.0
68         k = 1
69 beginfor_4:
70         unless k <= n goto endfor_4
71         $N1 = sin k
72         $N1 *= $N1
73         $N1 *= k
74         $N1 *= k
75         $N1 *= k
76         $N1 = 1.0 /$N1
77         sum += $N1
78         inc k
79         goto beginfor_4
80 endfor_4:
81         parray[0] = sum
82         $S0 = sprintf "%.9f\tFlint Hills\n", parray
83         print $S0
85         sum = 0.0
86         k = 1
87 beginfor_5:
88         unless k <= n goto endfor_5
89         $N1 = cos k
90         $N1 *= $N1
91         $N1 *= k
92         $N1 *= k
93         $N1 *= k
94         $N1 = 1.0 /$N1
95         sum += $N1
96         inc k
97         goto beginfor_5
98 endfor_5:
99         parray[0] = sum
100         $S0 = sprintf "%.9f\tCookson Hills\n", parray
101         print $S0
103         sum = 0.0
104         k = 1
105 beginfor_6:
106         unless k <= n goto endfor_6
107         $N1 = 1.0 /k
108         sum += $N1
109         inc k
110         goto beginfor_6
111 endfor_6:
112         parray[0] = sum
113         $S0 = sprintf "%.9f\tHarmonic\n", parray
114         print $S0
116         sum = 0.0
117         k = 1
118 beginfor_7:
119         unless k <= n goto endfor_7
120         $N1 = k * k
121         $N1 = 1.0 / $N1
122         sum += $N1
123         inc k
124         goto beginfor_7
125 endfor_7:
126         parray[0] = sum
127         $S0 = sprintf "%.9f\tRiemann Zeta\n", parray
128         print $S0
130         sum = 0.0
131         a = -1.0
132         k = 1
133 beginfor_8:
134         unless k <= n goto endfor_8
135         neg a
136         $N1 = a / k
137         sum += $N1
138         inc k
139         goto beginfor_8
140 endfor_8:
141         parray[0] = sum
142         $S0 = sprintf "%.9f\tAlternating Harmonic\n", parray
143         print $S0
145         sum = 0.0
146         a = -1.0
147         k = 1
148 beginfor_9:
149         unless k <= n goto endfor_9
150         neg a
151         $N1 = 2.0 * k
152         dec $N1
153         $N1 = a / $N1
154         sum += $N1
155         inc k
156         goto beginfor_9
157 endfor_9:
158         parray[0] = sum
159         $S0 = sprintf "%.9f\tGregory\n", parray
160         print $S0
162 .end
164 # Local Variables:
165 #   mode: pir
166 #   fill-column: 100
167 # End:
168 # vim: expandtab shiftwidth=4 ft=pir: