chrislo-sourceclassifier 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. data/Manifest +325 -0
  2. data/README.textile +51 -0
  3. data/Rakefile +64 -0
  4. data/examples/example.rb +22 -0
  5. data/lib/sourceclassifier.rb +22 -0
  6. data/lib/trainer.rb +51 -0
  7. data/sourceclassifier.gemspec +35 -0
  8. data/sources/gcc/ackermann.gcc-2.gcc +93 -0
  9. data/sources/gcc/ackermann.gcc-3.gcc +20 -0
  10. data/sources/gcc/ary.gcc +40 -0
  11. data/sources/gcc/binarytrees.gcc +136 -0
  12. data/sources/gcc/binarytrees.gcc-2.gcc +140 -0
  13. data/sources/gcc/binarytrees.gcc-3.gcc +134 -0
  14. data/sources/gcc/chameneos.gcc +117 -0
  15. data/sources/gcc/chameneos.gcc-2.gcc +134 -0
  16. data/sources/gcc/chameneos.gcc-3.gcc +120 -0
  17. data/sources/gcc/chameneosredux.gcc +306 -0
  18. data/sources/gcc/echo.gcc +144 -0
  19. data/sources/gcc/except.gcc +52 -0
  20. data/sources/gcc/fannkuch.gcc +105 -0
  21. data/sources/gcc/fannkuch.gcc-2.gcc +94 -0
  22. data/sources/gcc/fasta.gcc +158 -0
  23. data/sources/gcc/fasta.gcc-2.gcc +132 -0
  24. data/sources/gcc/fasta.gcc-3.gcc +145 -0
  25. data/sources/gcc/fasta.gcc-4.gcc +141 -0
  26. data/sources/gcc/fibo.gcc +20 -0
  27. data/sources/gcc/harmonic.gcc +22 -0
  28. data/sources/gcc/hash.gcc +31 -0
  29. data/sources/gcc/hash2.gcc +38 -0
  30. data/sources/gcc/heapsort.gcc +72 -0
  31. data/sources/gcc/hello.gcc-2.gcc +12 -0
  32. data/sources/gcc/hello.gcc-3.gcc +20 -0
  33. data/sources/gcc/knucleotide.gcc +173 -0
  34. data/sources/gcc/knucleotide.gcc-2.gcc +168 -0
  35. data/sources/gcc/lists.gcc +226 -0
  36. data/sources/gcc/magicsquares.gcc +378 -0
  37. data/sources/gcc/mandelbrot.gcc +84 -0
  38. data/sources/gcc/mandelbrot.gcc-2.gcc +63 -0
  39. data/sources/gcc/mandelbrot.gcc-3.gcc +91 -0
  40. data/sources/gcc/mandelbrot.gcc-4.gcc +78 -0
  41. data/sources/gcc/matrix.gcc +66 -0
  42. data/sources/gcc/message.gcc-2.gcc +72 -0
  43. data/sources/gcc/message.gcc-3.gcc +64 -0
  44. data/sources/gcc/methcall.gcc +89 -0
  45. data/sources/gcc/moments.gcc +120 -0
  46. data/sources/gcc/nbody.gcc +142 -0
  47. data/sources/gcc/nbody.gcc-2.gcc +143 -0
  48. data/sources/gcc/nbody.gcc-3.gcc +142 -0
  49. data/sources/gcc/nestedloop.gcc +25 -0
  50. data/sources/gcc/nsieve.gcc +35 -0
  51. data/sources/gcc/nsievebits.gcc-2.gcc +37 -0
  52. data/sources/gcc/nsievebits.gcc-3.gcc +53 -0
  53. data/sources/gcc/objinst.gcc +95 -0
  54. data/sources/gcc/partialsums.gcc +86 -0
  55. data/sources/gcc/partialsums.gcc-3.gcc +81 -0
  56. data/sources/gcc/partialsums.gcc-4.gcc +68 -0
  57. data/sources/gcc/pidigits.gcc +105 -0
  58. data/sources/gcc/primes.gcc +75 -0
  59. data/sources/gcc/prodcons.gcc +86 -0
  60. data/sources/gcc/random.gcc +29 -0
  61. data/sources/gcc/raytracer.gcc +125 -0
  62. data/sources/gcc/raytracer.gcc-2.gcc +181 -0
  63. data/sources/gcc/recursive.gcc +68 -0
  64. data/sources/gcc/recursive.gcc-2.gcc +55 -0
  65. data/sources/gcc/regexdna.gcc-2.gcc +126 -0
  66. data/sources/gcc/regexmatch.gcc +136 -0
  67. data/sources/gcc/revcomp.gcc +85 -0
  68. data/sources/gcc/revcomp.gcc-2.gcc +88 -0
  69. data/sources/gcc/revcomp.gcc-4.gcc +71 -0
  70. data/sources/gcc/reversefile.gcc +103 -0
  71. data/sources/gcc/reversefile.gcc-2.gcc +56 -0
  72. data/sources/gcc/sieve.gcc +34 -0
  73. data/sources/gcc/spectralnorm.gcc +54 -0
  74. data/sources/gcc/spellcheck.gcc +72 -0
  75. data/sources/gcc/spellcheck.gcc-2.gcc +61 -0
  76. data/sources/gcc/strcat.gcc +38 -0
  77. data/sources/gcc/sumcol.gcc-2.gcc +98 -0
  78. data/sources/gcc/sumcol.gcc-3.gcc +22 -0
  79. data/sources/gcc/sumcol.gcc-4.gcc +18 -0
  80. data/sources/gcc/sumcol.gcc-5.gcc +32 -0
  81. data/sources/gcc/takfp.gcc +23 -0
  82. data/sources/gcc/tcp-stream.gcc +122 -0
  83. data/sources/gcc/tcpecho.gcc +122 -0
  84. data/sources/gcc/tcpecho.gcc-2.gcc +136 -0
  85. data/sources/gcc/tcprequest.gcc +122 -0
  86. data/sources/gcc/threadring.gcc +73 -0
  87. data/sources/gcc/wc.gcc +52 -0
  88. data/sources/gcc/wc.gcc-2.gcc +40 -0
  89. data/sources/gcc/wc.gcc-3.gcc +46 -0
  90. data/sources/gcc/wordfreq.gcc-2.gcc +85 -0
  91. data/sources/perl/ackermann.perl +28 -0
  92. data/sources/perl/ackermann.perl-2.perl +25 -0
  93. data/sources/perl/ackermann.perl-3.perl +20 -0
  94. data/sources/perl/ackermann.perl-4.perl +18 -0
  95. data/sources/perl/ary.perl +25 -0
  96. data/sources/perl/ary.perl-2.perl +23 -0
  97. data/sources/perl/binarytrees.perl +66 -0
  98. data/sources/perl/binarytrees.perl-2.perl +71 -0
  99. data/sources/perl/chameneos.perl +67 -0
  100. data/sources/perl/echo.perl +81 -0
  101. data/sources/perl/except.perl +73 -0
  102. data/sources/perl/fannkuch.perl +44 -0
  103. data/sources/perl/fannkuch.perl-2.perl +38 -0
  104. data/sources/perl/fasta.perl +112 -0
  105. data/sources/perl/fasta.perl-2.perl +135 -0
  106. data/sources/perl/fasta.perl-4.perl +122 -0
  107. data/sources/perl/fibo.perl +15 -0
  108. data/sources/perl/fibo.perl-2.perl +0 -0
  109. data/sources/perl/fibo.perl-3.perl +0 -0
  110. data/sources/perl/harmonic.perl +7 -0
  111. data/sources/perl/hash.perl +23 -0
  112. data/sources/perl/hash.perl-2.perl +17 -0
  113. data/sources/perl/hash.perl-3.perl +24 -0
  114. data/sources/perl/hash2.perl +16 -0
  115. data/sources/perl/heapsort.perl +65 -0
  116. data/sources/perl/heapsort.perl-2.perl +0 -0
  117. data/sources/perl/hello.perl +5 -0
  118. data/sources/perl/knucleotide.perl-2.perl +30 -0
  119. data/sources/perl/lists.perl +48 -0
  120. data/sources/perl/mandelbrot.perl-2.perl +32 -0
  121. data/sources/perl/matrix.perl +59 -0
  122. data/sources/perl/matrix.perl-2.perl +0 -0
  123. data/sources/perl/matrix.perl-3.perl +0 -0
  124. data/sources/perl/message.perl +27 -0
  125. data/sources/perl/methcall.perl +66 -0
  126. data/sources/perl/moments.perl +44 -0
  127. data/sources/perl/nbody.perl +108 -0
  128. data/sources/perl/nestedloop.perl +28 -0
  129. data/sources/perl/nsieve.perl-2.perl +41 -0
  130. data/sources/perl/nsieve.perl-4.perl +43 -0
  131. data/sources/perl/nsievebits.perl +37 -0
  132. data/sources/perl/objinst.perl +73 -0
  133. data/sources/perl/partialsums.perl-3.perl +31 -0
  134. data/sources/perl/pidigits.perl +52 -0
  135. data/sources/perl/pidigits.perl-2.perl +47 -0
  136. data/sources/perl/process.perl +50 -0
  137. data/sources/perl/prodcons.perl +47 -0
  138. data/sources/perl/random.perl-4.perl +17 -0
  139. data/sources/perl/recursive.perl-2.perl +57 -0
  140. data/sources/perl/regexdna.perl +48 -0
  141. data/sources/perl/regexdna.perl-2.perl +43 -0
  142. data/sources/perl/regexdna.perl-3.perl +50 -0
  143. data/sources/perl/regexdna.perl-4.perl +49 -0
  144. data/sources/perl/regexdna.perl-5.perl +42 -0
  145. data/sources/perl/regexdna.perl-6.perl +43 -0
  146. data/sources/perl/regexmatch.perl +35 -0
  147. data/sources/perl/revcomp.perl-2.perl +34 -0
  148. data/sources/perl/reversefile.perl +8 -0
  149. data/sources/perl/reversefile.perl-2.perl +0 -0
  150. data/sources/perl/reversefile.perl-3.perl +0 -0
  151. data/sources/perl/sieve.perl +23 -0
  152. data/sources/perl/spectralnorm.perl-2.perl +54 -0
  153. data/sources/perl/spellcheck.perl +24 -0
  154. data/sources/perl/strcat.perl +13 -0
  155. data/sources/perl/strcat.perl-2.perl +0 -0
  156. data/sources/perl/sumcol.perl +8 -0
  157. data/sources/perl/takfp.perl +23 -0
  158. data/sources/perl/takfp.perl-3.perl +20 -0
  159. data/sources/perl/tcpecho.perl +61 -0
  160. data/sources/perl/tcprequest.perl +61 -0
  161. data/sources/perl/tcpstream.perl +61 -0
  162. data/sources/perl/threadring.perl +55 -0
  163. data/sources/perl/threadring.perl-2.perl +43 -0
  164. data/sources/perl/wc.perl +20 -0
  165. data/sources/perl/wc.perl-2.perl +14 -0
  166. data/sources/perl/wordfreq.perl +22 -0
  167. data/sources/perl/wordfreq.perl-3.perl +0 -0
  168. data/sources/perl/wordfreq.perl3.perl +0 -0
  169. data/sources/python/ackermann.python +21 -0
  170. data/sources/python/ary.python +19 -0
  171. data/sources/python/binarytrees.python +39 -0
  172. data/sources/python/binarytrees.python-3.python +44 -0
  173. data/sources/python/chameneos.python-6.python +73 -0
  174. data/sources/python/chameneosredux.python +126 -0
  175. data/sources/python/chameneosredux.python-2.python +122 -0
  176. data/sources/python/dispatch.python +176 -0
  177. data/sources/python/dispatch.python-2.python +136 -0
  178. data/sources/python/echo.python +64 -0
  179. data/sources/python/except.python +62 -0
  180. data/sources/python/fannkuch.python +50 -0
  181. data/sources/python/fannkuch.python-2.python +54 -0
  182. data/sources/python/fasta.python-2.python +79 -0
  183. data/sources/python/fibo.python +17 -0
  184. data/sources/python/fibo.python-2.python +0 -0
  185. data/sources/python/fibo.python-3.python +0 -0
  186. data/sources/python/harmonic.python-2.python +9 -0
  187. data/sources/python/hash.python +21 -0
  188. data/sources/python/hash.python-2.python +0 -0
  189. data/sources/python/hash2.python +30 -0
  190. data/sources/python/heapsort.python-3.python +66 -0
  191. data/sources/python/hello.python +5 -0
  192. data/sources/python/implicitode.python +231 -0
  193. data/sources/python/knucleotide.python +55 -0
  194. data/sources/python/lists.python +44 -0
  195. data/sources/python/magicsquares.python +145 -0
  196. data/sources/python/mandelbrot.python +44 -0
  197. data/sources/python/mandelbrot.python-2.python +35 -0
  198. data/sources/python/mandelbrot.python-3.python +46 -0
  199. data/sources/python/matrix.python +34 -0
  200. data/sources/python/matrix.python-2.python +23 -0
  201. data/sources/python/message.python +24 -0
  202. data/sources/python/message.python-2.python +20 -0
  203. data/sources/python/message.python-3.python +19 -0
  204. data/sources/python/meteor.python +210 -0
  205. data/sources/python/meteor.python-2.python +192 -0
  206. data/sources/python/methcall.python +51 -0
  207. data/sources/python/moments.python +65 -0
  208. data/sources/python/nbody.python +123 -0
  209. data/sources/python/nbody.python-2.python +120 -0
  210. data/sources/python/nestedloop.python +24 -0
  211. data/sources/python/nsieve.python +27 -0
  212. data/sources/python/nsieve.python-2.python +23 -0
  213. data/sources/python/nsieve.python-4.python +25 -0
  214. data/sources/python/nsievebits.python +27 -0
  215. data/sources/python/nsievebits.python-2.python +43 -0
  216. data/sources/python/objinst.python +53 -0
  217. data/sources/python/partialsums.python +37 -0
  218. data/sources/python/partialsums.python-2.python +35 -0
  219. data/sources/python/partialsums.python-3.python +48 -0
  220. data/sources/python/pidigits.python +38 -0
  221. data/sources/python/pidigits.python-3.python +63 -0
  222. data/sources/python/pidigits.python-4.python +24 -0
  223. data/sources/python/process.python +51 -0
  224. data/sources/python/process.python-2.python +133 -0
  225. data/sources/python/prodcons.python +51 -0
  226. data/sources/python/prodcons.python-2.python +0 -0
  227. data/sources/python/random.python +27 -0
  228. data/sources/python/raytracer.python +203 -0
  229. data/sources/python/recursive.python +35 -0
  230. data/sources/python/regexdna.python +39 -0
  231. data/sources/python/regexdna.python-2.python +34 -0
  232. data/sources/python/regexmatch.python +36 -0
  233. data/sources/python/revcomp.python-3.python +31 -0
  234. data/sources/python/reversefile.python +13 -0
  235. data/sources/python/reversefile.python-2.python +0 -0
  236. data/sources/python/reversefile.python-3.python +0 -0
  237. data/sources/python/sieve.python +50 -0
  238. data/sources/python/spectralnorm.python-2.python +36 -0
  239. data/sources/python/spellcheck.python +17 -0
  240. data/sources/python/strcat.python +35 -0
  241. data/sources/python/strcat.python-2.python +0 -0
  242. data/sources/python/sumcol.python-2.python +0 -0
  243. data/sources/python/sumcol.python-3.python +0 -0
  244. data/sources/python/takfp.python +19 -0
  245. data/sources/python/tcpecho.python +67 -0
  246. data/sources/python/tcprequest.python +67 -0
  247. data/sources/python/tcpstream.python +67 -0
  248. data/sources/python/threadring.python +47 -0
  249. data/sources/python/threadring.python-2.python +40 -0
  250. data/sources/python/threadring.python-3.python +34 -0
  251. data/sources/python/wc.python-2.python +19 -0
  252. data/sources/python/wordfreq.python +43 -0
  253. data/sources/python/wordfreq.python-2.python +0 -0
  254. data/sources/python/wordfreq.python-3.python +28 -0
  255. data/sources/python/wordfreq.python-4.python +38 -0
  256. data/sources/python/wordfreq.python-5.python +39 -0
  257. data/sources/ruby/ackermann.ruby +17 -0
  258. data/sources/ruby/ackermann.ruby-5.ruby +153 -0
  259. data/sources/ruby/ary.ruby +22 -0
  260. data/sources/ruby/binarytrees.ruby-2.ruby +55 -0
  261. data/sources/ruby/chameneos.ruby-2.ruby +71 -0
  262. data/sources/ruby/dispatch.ruby +114 -0
  263. data/sources/ruby/echo.ruby +41 -0
  264. data/sources/ruby/except.ruby +61 -0
  265. data/sources/ruby/except.ruby-2.ruby +61 -0
  266. data/sources/ruby/fannkuch.ruby +42 -0
  267. data/sources/ruby/fasta.ruby +81 -0
  268. data/sources/ruby/fibo.ruby +15 -0
  269. data/sources/ruby/harmonic.ruby-2.ruby +15 -0
  270. data/sources/ruby/hash.ruby +19 -0
  271. data/sources/ruby/hash2.ruby +23 -0
  272. data/sources/ruby/heapsort.ruby +55 -0
  273. data/sources/ruby/hello.ruby +6 -0
  274. data/sources/ruby/knucleotide.ruby-2.ruby +44 -0
  275. data/sources/ruby/lists.ruby +46 -0
  276. data/sources/ruby/mandelbrot.ruby-3.ruby +63 -0
  277. data/sources/ruby/matrix.ruby +40 -0
  278. data/sources/ruby/matrix.ruby-2.ruby +30 -0
  279. data/sources/ruby/message.ruby +29 -0
  280. data/sources/ruby/message.ruby-2.ruby +24 -0
  281. data/sources/ruby/meteor.ruby +386 -0
  282. data/sources/ruby/meteor.ruby-2.ruby +561 -0
  283. data/sources/ruby/methcall.ruby +58 -0
  284. data/sources/ruby/methcall.ruby-2.ruby +54 -0
  285. data/sources/ruby/moments.ruby +64 -0
  286. data/sources/ruby/nbody.ruby-2.ruby +145 -0
  287. data/sources/ruby/nestedloop.ruby +22 -0
  288. data/sources/ruby/nsieve.ruby +36 -0
  289. data/sources/ruby/nsieve.ruby-2.ruby +25 -0
  290. data/sources/ruby/nsievebits.ruby-2.ruby +42 -0
  291. data/sources/ruby/objinst.ruby +58 -0
  292. data/sources/ruby/partialsums.ruby +39 -0
  293. data/sources/ruby/pidigits.ruby +92 -0
  294. data/sources/ruby/pidigits.ruby-2.ruby +109 -0
  295. data/sources/ruby/prodcons.ruby +41 -0
  296. data/sources/ruby/random.ruby +17 -0
  297. data/sources/ruby/recursive.ruby-2.ruby +53 -0
  298. data/sources/ruby/regexdna.ruby +32 -0
  299. data/sources/ruby/regexdna.ruby-2.ruby +38 -0
  300. data/sources/ruby/regexmatch.ruby +33 -0
  301. data/sources/ruby/revcomp.ruby +28 -0
  302. data/sources/ruby/reversefile.ruby +7 -0
  303. data/sources/ruby/sieve.ruby +30 -0
  304. data/sources/ruby/spectralnorm.ruby +48 -0
  305. data/sources/ruby/spellcheck.ruby +18 -0
  306. data/sources/ruby/spellcheck.ruby-2.ruby +0 -0
  307. data/sources/ruby/strcat.ruby +12 -0
  308. data/sources/ruby/strcat.ruby-2.ruby +12 -0
  309. data/sources/ruby/sumcol.ruby +12 -0
  310. data/sources/ruby/sumcol.ruby-2.ruby +5 -0
  311. data/sources/ruby/takfp.ruby +15 -0
  312. data/sources/ruby/tcpecho.ruby +45 -0
  313. data/sources/ruby/tcprequest.ruby +45 -0
  314. data/sources/ruby/tcpstream.ruby +45 -0
  315. data/sources/ruby/threadring.ruby +61 -0
  316. data/sources/ruby/threadring.ruby-2.ruby +33 -0
  317. data/sources/ruby/wc.ruby +15 -0
  318. data/sources/ruby/wordfreq.ruby +17 -0
  319. data/sources/ruby/wordfreq.ruby2.ruby +0 -0
  320. data/test/fixtures/sources/gcc/ackermann.gcc-2.gcc +93 -0
  321. data/test/fixtures/sources/python/ackermann.python +21 -0
  322. data/test/fixtures/sources/ruby/ackermann.ruby +17 -0
  323. data/test/test_source_classifier.rb +40 -0
  324. data/test/test_trainer.rb +34 -0
  325. data/trainer.bin +1193 -0
  326. metadata +393 -0
@@ -0,0 +1,25 @@
1
+ /* -*- mode: c -*-
2
+ * $Id: nestedloop.gcc,v 1.1.1.1 2004-05-19 18:10:56 bfulgham Exp $
3
+ * http://www.bagley.org/~doug/shootout/
4
+ */
5
+
6
+ #include <stdio.h>
7
+ #include <stdlib.h>
8
+ #include <unistd.h>
9
+
10
+ int
11
+ main(int argc, char *argv[]) {
12
+ int n = ((argc == 2) ? atoi(argv[1]) : 1);
13
+ int a, b, c, d, e, f, x=0;
14
+
15
+ for (a=0; a<n; a++)
16
+ for (b=0; b<n; b++)
17
+ for (c=0; c<n; c++)
18
+ for (d=0; d<n; d++)
19
+ for (e=0; e<n; e++)
20
+ for (f=0; f<n; f++)
21
+ x++;
22
+
23
+ printf("%d\n", x);
24
+ return(0);
25
+ }
@@ -0,0 +1,35 @@
1
+ // The Computer Language Shootout
2
+ // http://shootout.alioth.debian.org/
3
+ // Precedent C entry modified by bearophile for speed and size, 31 Jan 2006
4
+ // Compile with: -O3 -s -std=c99 -fomit-frame-pointer
5
+
6
+ #include <stdio.h>
7
+ #include <stdlib.h>
8
+ #include <string.h>
9
+
10
+ typedef unsigned char boolean;
11
+
12
+
13
+ static void nsieve(int m) {
14
+ unsigned int count = 0, i, j;
15
+ boolean * flags = (boolean *) malloc(m * sizeof(boolean));
16
+ memset(flags, 1, m);
17
+
18
+ for (i = 2; i < m; ++i)
19
+ if (flags[i]) {
20
+ ++count;
21
+ for (j = i << 1; j < m; j += i)
22
+ // if (flags[j])
23
+ flags[j] = 0;
24
+ }
25
+
26
+ free(flags);
27
+ printf("Primes up to %8u %8u\n", m, count);
28
+ }
29
+
30
+ int main(int argc, char * argv[]) {
31
+ int m = atoi(argv[1]);
32
+ for (int i = 0; i < 3; i++)
33
+ nsieve(10000 << (m-i));
34
+ return 0;
35
+ }
@@ -0,0 +1,37 @@
1
+ /*
2
+ ** The Great Computer Language Shootout
3
+ ** http://shootout.alioth.debian.org/
4
+ ** contributed by Mike Pall
5
+ */
6
+
7
+ #include <stdio.h>
8
+ #include <stdlib.h>
9
+ #include <string.h>
10
+
11
+ typedef unsigned int bits;
12
+ #define BBITS (sizeof(bits) * 8)
13
+ #define BSIZE(x) (((x) / 8) + sizeof(bits))
14
+ #define BMASK(x) (1 << ((x) % BBITS))
15
+ #define BTEST(p, x) ((p)[(x) / BBITS] & BMASK(x))
16
+ #define BFLIP(p, x) (p)[(x) / BBITS] ^= BMASK(x)
17
+
18
+ int main(int argc, char **argv)
19
+ {
20
+ unsigned int m, sz = 10000 << (argc > 1 ? atoi(argv[1]) : 1);
21
+ bits *primes = (bits *)malloc(BSIZE(sz));
22
+ if (!primes) return 1;
23
+ for (m = 0; m <= 2; m++) {
24
+ unsigned int i, j, count = 0, n = sz >> m;
25
+ memset(primes, 0xff, BSIZE(n));
26
+ for (i = 2; i <= n; i++)
27
+ if (BTEST(primes, i)) {
28
+ count++;
29
+ for (j = i + i; j <= n; j += i)
30
+ if (BTEST(primes, j)) BFLIP(primes, j);
31
+ }
32
+ printf("Primes up to %8d %8d\n", n, count);
33
+ }
34
+ free(primes);
35
+ return 0;
36
+ }
37
+
@@ -0,0 +1,53 @@
1
+ // The Computer Language Shootout
2
+ // http://shootout.alioth.debian.org/
3
+ // Precedent C entry modified by bearophile for speed and size, 31 Jan 2006
4
+ // Modified to use bits to hold state by mukund
5
+ // Compile with: gcc -pipe -Wall -O3 -funroll-all-loops -march=athlon64 -m3dnow nsieve.c -o nsieve
6
+
7
+ #include <stdio.h>
8
+ #include <stdint.h>
9
+ #include <stdlib.h>
10
+ #include <string.h>
11
+
12
+ #define INDEX_INT(i) ((i) >> 5)
13
+ #define INDEX_BIT(i) (1 << ((i) & 0x1f))
14
+ #define INDEX_BITMASK(i) (~INDEX_BIT(i))
15
+
16
+ int
17
+ main (int argc, char *argv[])
18
+ {
19
+ int n = atoi (argv[1]);
20
+ unsigned int count1 = 0, count2 = 0, count4 = 0;
21
+ unsigned int i, j, m, m2;
22
+ uint32_t *flags;
23
+
24
+ m = 10000 << n;
25
+
26
+ flags = (uint32_t *) malloc ((m / sizeof (uint32_t)) + 1);
27
+ memset (flags, 0xff, (m / sizeof (uint32_t)) + 1);
28
+
29
+ for (i = 2; i < m; ++i)
30
+ {
31
+ if (flags[INDEX_INT (i)] & INDEX_BIT (i))
32
+ {
33
+ for (j = i * 2; j <= m; j += i)
34
+ flags[INDEX_INT (j)] &= INDEX_BITMASK (j);
35
+
36
+ ++count1;
37
+ m2 = m >> 1;
38
+ if (i < m2)
39
+ ++count2;
40
+ m2 = m2 >> 1;
41
+ if (i < m2)
42
+ ++count4;
43
+ }
44
+ }
45
+
46
+ printf ("Primes up to %8u %8u\n", m, count1);
47
+ printf ("Primes up to %8u %8u\n", m / 2, count2);
48
+ printf ("Primes up to %8u %8u\n", m / 4, count4);
49
+
50
+ free (flags);
51
+
52
+ return 0;
53
+ }
@@ -0,0 +1,95 @@
1
+ /* -*- mode: c -*-
2
+ * $Id: objinst.gcc,v 1.1.1.1 2004-05-19 18:11:02 bfulgham Exp $
3
+ * http://www.bagley.org/~doug/shootout/
4
+ */
5
+
6
+ #include <stdio.h>
7
+ #include <stdlib.h>
8
+
9
+
10
+ enum {false, true};
11
+
12
+ #define TOGGLE \
13
+ char state; \
14
+ char (*value)(struct Toggle *); \
15
+ struct Toggle *(*activate)(struct Toggle *)
16
+
17
+ #define DESTROY free
18
+
19
+ typedef struct Toggle {
20
+ TOGGLE;
21
+ } Toggle;
22
+
23
+ char toggle_value(Toggle *this) {
24
+ return(this->state);
25
+ }
26
+ Toggle *toggle_activate(Toggle *this) {
27
+ this->state = !this->state;
28
+ return(this);
29
+ }
30
+ Toggle *init_Toggle(Toggle *this, char start_state) {
31
+ this->state = start_state;
32
+ this->value = toggle_value;
33
+ this->activate = toggle_activate;
34
+ return(this);
35
+ }
36
+ Toggle *new_Toggle(char start_state) {
37
+ Toggle *this = (Toggle *)malloc(sizeof(Toggle));
38
+ return(init_Toggle(this, start_state));
39
+ }
40
+
41
+
42
+ typedef struct NthToggle {
43
+ TOGGLE;
44
+ int count_max;
45
+ int counter;
46
+ } NthToggle;
47
+
48
+ NthToggle *nth_toggle_activate(NthToggle *this) {
49
+ if (++this->counter >= this->count_max) {
50
+ this->state = !this->state;
51
+ this->counter = 0;
52
+ }
53
+ return(this);
54
+ }
55
+ NthToggle *init_NthToggle(NthToggle *this, int max_count) {
56
+ this->count_max = max_count;
57
+ this->counter = 0;
58
+ this->activate = (Toggle *(*)(Toggle *))nth_toggle_activate;
59
+ return(this);
60
+ }
61
+ NthToggle *new_NthToggle(char start_state, int max_count) {
62
+ NthToggle *this = (NthToggle *)malloc(sizeof(NthToggle));
63
+ this = (NthToggle *)init_Toggle((Toggle *)this, start_state);
64
+ return(init_NthToggle(this, max_count));
65
+ }
66
+
67
+
68
+ int main(int argc, char *argv[]) {
69
+ int i, n = ((argc == 2) ? atoi(argv[1]) : 1);
70
+ Toggle *tog;
71
+ NthToggle *ntog;
72
+
73
+ tog = new_Toggle(true);
74
+ for (i=0; i<5; i++) {
75
+ fputs((tog->activate(tog)->value(tog)) ? "true\n" : "false\n", stdout);
76
+ }
77
+ DESTROY(tog);
78
+ for (i=0; i<n; i++) {
79
+ tog = new_Toggle(true);
80
+ DESTROY(tog);
81
+ }
82
+
83
+ fputs("\n", stdout);
84
+
85
+ ntog = new_NthToggle(true, 3);
86
+ for (i=0; i<8; i++) {
87
+ fputs((ntog->activate(ntog)->value(ntog)) ? "true\n" : "false\n", stdout);
88
+ }
89
+ DESTROY(ntog);
90
+ for (i=0; i<n; i++) {
91
+ ntog = new_NthToggle(true, 3);
92
+ DESTROY(ntog);
93
+ }
94
+ return 0;
95
+ }
@@ -0,0 +1,86 @@
1
+ /*
2
+ ** The Great Computer Language Shootout
3
+ ** http://shootout.alioth.debian.org/
4
+ ** contributed by Mike Pall
5
+ **
6
+ ** compile with:
7
+ ** gcc -O3 -fomit-frame-pointer -ffast-math -o partialsums partialsums.c -lm
8
+ ** Adding -march=<yourcpu> may help, too.
9
+ ** On a P4/K8 or later try adding: --march=<yourcpu> -mfpmath=sse -msse2
10
+ */
11
+
12
+ #include <stdio.h>
13
+ #include <stdlib.h>
14
+ #include <math.h>
15
+
16
+ int main(int argc, char **argv)
17
+ {
18
+ int k, n = atoi(argv[1]);
19
+ double sum;
20
+
21
+ /*
22
+ ** Yes, I tried using a double as a primary or secondary loop variable.
23
+ ** But the x86 ABI requires a cleared x87 FPU stack before every call
24
+ ** (e.g. to sin()) which nullifies any performance gains.
25
+ **
26
+ ** Combining all loops does not pay off because the x87 FPU has to shuffle
27
+ ** stack slots and/or runs out of registers. This may not be entirely true
28
+ ** for SSE2 with fully inlined FPU code (-ffast-math required). Dito for
29
+ ** other CPUs with a register-based FPU and a sane FP ABI.
30
+ **
31
+ ** Auto vectorization may be a bit easier with separate loops, too.
32
+ */
33
+ #define kd ((double)k)
34
+
35
+ sum = 0.0;
36
+ for (k = 0; k <= n; k++) { /* pow(2.0/3.0, kd) inlined */
37
+ double x = 1.0, q = 2.0/3.0;
38
+ int j = k;
39
+ for (;;) { if (j & 1) x *= q; if ((j >>= 1) == 0) break; q = q*q; }
40
+ sum += x;
41
+ }
42
+ printf("%.9f\t(2/3)^k\n", sum);
43
+
44
+ sum = 0.0;
45
+ for (k = 1 ; k <= n; k++) sum += 1/sqrt(kd); /* aka pow(kd, -0.5) */
46
+ printf("%.9f\tk^-0.5\n", sum);
47
+
48
+ sum = 0.0;
49
+ for (k = 1; k <= n; k++) sum += 1.0/(kd*(kd+1.0));
50
+ printf("%.9f\t1/k(k+1)\n", sum);
51
+
52
+ sum = 0.0;
53
+ for (k = 1; k <= n; k++) {
54
+ double sk = sin(kd);
55
+ sum += 1.0/(kd*kd*kd*sk*sk);
56
+ }
57
+ printf("%.9f\tFlint Hills\n", sum);
58
+
59
+ sum = 0.0;
60
+ for (k = 1; k <= n; k++) {
61
+ double ck = cos(kd);
62
+ sum += 1.0/((kd*kd)*kd*ck*ck);
63
+ }
64
+ printf("%.9f\tCookson Hills\n", sum);
65
+
66
+ sum = 0.0;
67
+ for (k = 1; k <= n; k++) sum += 1.0/kd;
68
+ printf("%.9f\tHarmonic\n", sum);
69
+
70
+ sum = 0.0;
71
+ for (k = 1; k <= n; k++) sum += 1.0/(kd*kd);
72
+ printf("%.9f\tRiemann Zeta\n", sum);
73
+
74
+ sum = 0.0;
75
+ for (k = 1; k <= n-1; k += 2) sum += 1.0/kd;
76
+ for (k = 2; k <= n; k += 2) sum -= 1.0/kd;
77
+ printf("%.9f\tAlternating Harmonic\n", sum);
78
+
79
+ sum = 0.0;
80
+ for (k = 1; k <= 2*n-1; k += 4) sum += 1.0/kd;
81
+ for (k = 3; k <= 2*n; k += 4) sum -= 1.0/kd;
82
+ printf("%.9f\tGregory\n", sum);
83
+
84
+ return 0;
85
+ }
86
+
@@ -0,0 +1,81 @@
1
+ /*
2
+ ** The Computer Language Shootout
3
+ ** http://shootout.alioth.debian.org/
4
+ ** contributed by Mike Pall
5
+ ** de-optimized by Isaac Gouy
6
+ **
7
+ ** compile with:
8
+ ** gcc -O3 -fomit-frame-pointer -ffast-math -o partialsums partialsums.c -lm
9
+ ** Adding -march=<yourcpu> may help, too.
10
+ ** On a P4/K8 or later try adding: --march=<yourcpu> -mfpmath=sse -msse2
11
+ */
12
+
13
+ #include <stdio.h>
14
+ #include <stdlib.h>
15
+ #include <math.h>
16
+
17
+ int main(int argc, char **argv)
18
+ {
19
+ int k, n = atoi(argv[1]);
20
+ double sum, a;
21
+
22
+ /*
23
+ ** Yes, I (Mike Pall) tried using a double as a primary or secondary loop variable.
24
+ ** But the x86 ABI requires a cleared x87 FPU stack before every call
25
+ ** (e.g. to sin()) which nullifies any performance gains.
26
+ **
27
+ ** Combining all loops does not pay off because the x87 FPU has to shuffle
28
+ ** stack slots and/or runs out of registers. This may not be entirely true
29
+ ** for SSE2 with fully inlined FPU code (-ffast-math required). Dito for
30
+ ** other CPUs with a register-based FPU and a sane FP ABI.
31
+ **
32
+ ** Auto vectorization may be a bit easier with separate loops, too.
33
+ */
34
+
35
+ #define kd ((double)k)
36
+
37
+ sum = 0.0;
38
+ for (k = 0; k <= n; k++) sum += pow(2.0/3.0, kd);
39
+ printf("%.9f\t(2/3)^k\n", sum);
40
+
41
+ sum = 0.0;
42
+ for (k = 1 ; k <= n; k++) sum += 1/sqrt(kd); /* aka pow(kd, -0.5) */
43
+ printf("%.9f\tk^-0.5\n", sum);
44
+
45
+ sum = 0.0;
46
+ for (k = 1; k <= n; k++) sum += 1.0/(kd*(kd+1.0));
47
+ printf("%.9f\t1/k(k+1)\n", sum);
48
+
49
+ sum = 0.0;
50
+ for (k = 1; k <= n; k++) {
51
+ double sk = sin(kd);
52
+ sum += 1.0/(kd*kd*kd*sk*sk);
53
+ }
54
+ printf("%.9f\tFlint Hills\n", sum);
55
+
56
+ sum = 0.0;
57
+ for (k = 1; k <= n; k++) {
58
+ double ck = cos(kd);
59
+ sum += 1.0/(kd*kd*kd*ck*ck);
60
+ }
61
+ printf("%.9f\tCookson Hills\n", sum);
62
+
63
+ sum = 0.0;
64
+ for (k = 1; k <= n; k++) sum += 1.0/kd;
65
+ printf("%.9f\tHarmonic\n", sum);
66
+
67
+ sum = 0.0;
68
+ for (k = 1; k <= n; k++) sum += 1.0/(kd*kd);
69
+ printf("%.9f\tRiemann Zeta\n", sum);
70
+
71
+ sum = 0.0; a = -1.0;
72
+ for (k = 1; k <= n; k++) sum += (a = -a)/kd;
73
+ printf("%.9f\tAlternating Harmonic\n", sum);
74
+
75
+ sum = 0.0; a = -1.0;
76
+ for (k = 1; k <= n; k++) sum += (a = -a)/(2.0*kd - 1.0);
77
+ printf("%.9f\tGregory\n", sum);
78
+
79
+ return 0;
80
+ }
81
+
@@ -0,0 +1,68 @@
1
+ // The Computer Language Shootout
2
+ // http://shootout.alioth.debian.org/
3
+ // contributed by Greg Buchholz
4
+ //
5
+ // compile with: -O3 -msse2 -lm
6
+
7
+ #include<math.h>
8
+ #include<stdio.h>
9
+
10
+ typedef double v2df __attribute__ ((vector_size (16)));
11
+
12
+ v2df make_vec(double a, double b)
13
+ {
14
+ v2df v;
15
+ double *tmp;
16
+ tmp = (double *)&v; *(tmp) = a; *(tmp+1) = b;
17
+ return v;
18
+ }
19
+
20
+ double sum_vec(v2df x)
21
+ {
22
+ double *tmp = (double *)&x;
23
+ return *(tmp) + *(tmp+1);
24
+ }
25
+
26
+ int main(int argc, char* argv[])
27
+ {
28
+ double twoThrd = 0, sqrts = 0, Flint = 0, Cookson = 0;
29
+ v2df Harmonic, zeta, poly, alt, Gregory;
30
+ v2df zero, one, two, init, m_one, kv, av;
31
+
32
+ double k, k3, s, c;
33
+ int n; n = atoi(argv[1]);
34
+
35
+ zero = make_vec( 0.0, 0.0); one = make_vec( 1.0, 1.0);
36
+ two = make_vec( 2.0, 2.0); m_one = make_vec(-1.0, -1.0);
37
+ init = make_vec( 1.0, 2.0); av = make_vec( 1.0, -1.0);
38
+
39
+ Harmonic = zeta = poly = alt = Gregory = zero;
40
+
41
+ for (k=1; k<=n; k++)
42
+ {
43
+ twoThrd += pow(2.0/3.0, k-1);
44
+ sqrts += 1.0/sqrt(k);
45
+ k3 = k*k*k;
46
+ s = sin(k); c = cos(k);
47
+ Flint += 1.0/(k3 * s*s);
48
+ Cookson += 1.0/(k3 * c*c);
49
+ }
50
+
51
+ for (kv=init; *(double *)(&kv)<=n; kv+=two)
52
+ {
53
+ poly += one /(kv*(kv+one));
54
+ Harmonic+= one / kv;
55
+ zeta += one /(kv*kv);
56
+ alt += av / kv;
57
+ Gregory += av /(two*kv - one);
58
+ }
59
+
60
+ #define psum(name,num) printf("%.9f\t%s\n",num,name)
61
+ psum("(2/3)^k", twoThrd); psum("k^-0.5", sqrts);
62
+ psum("1/k(k+1)", sum_vec(poly)); psum("Flint Hills", Flint);
63
+ psum("Cookson Hills", Cookson); psum("Harmonic", sum_vec(Harmonic));
64
+ psum("Riemann Zeta",sum_vec(zeta)); psum("Alternating Harmonic",sum_vec(alt));
65
+ psum("Gregory", sum_vec(Gregory));
66
+
67
+ return 0;
68
+ }