[PDD] Add docs for the Parrot_PMC_push_* and Parrot_PMC_pop_* functions
[parrot.git] / examples / shootout / takfp.pir
blob93c440146cd11170119635d3be3eb51502663273
1 #!./parrot -R cgp
2 # Copyright (C) 2005-2009, Parrot Foundation.
3 # $Id$
5 # ./parrot -R cgp takfp.pir N         (N = 10 for shootout)
6 # by Joshua Isom
7 # changed default value to N=7 (shootout default before being deprecated)
8 # anyway N=10 froze my laptop. Karl Forner
10 .sub main :main
11         .param pmc argv
12         .local int argc, n
13         argc = argv
14         n = 7
15         unless argc == 2 goto argsok
16         $S0 = argv[1]
17         n = $S0
18 argsok:
19         .local num f
20         $N0 = n
21         $N0 *= 3
22         $N1 = n
23         $N1 *= 2
24         $N2 = n
25         $N2 *= 1
26         f = Tak($N0, $N1, $N2)
27         $P0 = new 'FixedFloatArray'
28         $P0 = 1
29         $P0[0] = f
30         $S0 = sprintf "%.1f\n", $P0
31         print $S0
32 .end
34 .sub Tak
35         .param num x
36         .param num y
37         .param num z
38         unless y >= x goto endif
39         .return(z)
40 endif:
41         .local num tmp
42         tmp = x - 1
43         $N0 = Tak(tmp, y, z)
44         tmp = y - 1
45         $N1 = Tak(tmp, z, x)
46         tmp = z - 1
47         $N2 = Tak(tmp, x, y)
48         .tailcall Tak($N0, $N1, $N2)
49 .end
52 # Local Variables:
53 #   mode: pir
54 #   fill-column: 100
55 # End:
56 # vim: expandtab shiftwidth=4 ft=pir: