]> www.ginac.de Git - cln.git/blob - tests/timeUPMImul.cc
Initial revision
[cln.git] / tests / timeUPMImul.cc
1 #include <cl_number.h>
2 #include <cl_io.h>
3 #include <cl_integer.h>
4 #include <cl_modinteger.h>
5 #include <cl_univpoly.h>
6 #include <stdlib.h>
7 #include <string.h>
8 #include <cl_timing.h>
9
10 int main (int argc, char * argv[])
11 {
12         int repetitions = 1;
13         if ((argc >= 3) && !strcmp(argv[1],"-r")) {
14                 repetitions = atoi(argv[2]);
15                 argc -= 2; argv += 2;
16         }
17         if (argc < 2)
18                 exit(1);
19
20         int n = atoi(argv[1]);
21         cl_I m = 100001;
22         int i;
23
24         cl_modint_ring R1 = cl_find_modint_ring(m);
25         cl_univpoly_ring PR1 = cl_find_univpoly_ring(R1);
26         cl_UP p1 = PR1->create(n-1);
27         for (i = 0; i < n; i++)
28                 p1.set_coeff(i, R1->canonhom((int)(1.618033989*i*i)));
29         p1.finalize();
30
31         cl_stdout << p1 << endl;
32
33         cl_UP sp1 = PR1->zero();
34         { CL_TIMING;
35           for (int rep = repetitions; rep > 0; rep--)
36             { sp1 = square(p1); }
37         }
38
39         cl_stdout << sp1 << endl;
40 }
41
42 // Time:
43 //    n      modint    modint2   neu
44 //    2      0.000123  0.000082  0.000086
45 //    5      0.00051   0.00031   0.00032
46 //   10      0.00169   0.00095   0.00100
47 //   25      0.0089    0.0049    0.0053
48 //   50      0.031     0.018     0.020
49 //  100      0.118     0.070     0.079
50 //  250      0.72      0.43      0.48
51 //  500      2.87      1.76      1.91
52 // 1000     11.4       7.0       8.0