Time for some benchmarks.
- GCC 4.6.3 -march=native -mtune=native -O3
- glibc 2.15
- Linux 3.2.9 SMP PREEMPT
- i5 2500K clocked at 3.30GHz
-
stdout is /dev/null
- 50000000 iterations
- Programs are run two times and the best result is used.
>>1's fizzbuzz:
real 0m3.034s
user 0m3.023s
sys 0m0.007s
My fizzbuzz:
real 0m1.696s
user 0m1.677s
sys 0m0.017s
#include <stdio.h>
void fizzbuzz(unsigned int n)
{
char *s[] = {"%d\n", "Fizz\n", "Buzz\n", "FizzBuzz\n"};
unsigned int coarse = n >> 4;
unsigned int i = 1;
for (; coarse; coarse--) {
printf("%d\n"
"%d\n"
"Fizz\n"
"%d\n"
"Buzz\n"
"Fizz\n"
"%d\n"
"%d\n"
"Fizz\n"
"Buzz\n"
"%d\n"
"Fizz\n"
"%d\n"
"%d\n"
"FizzBuzz\n",
i, i + 1, i + 3, i + 6, i + 7, i + 10, i + 12, i + 13);
i += 15;
}
i--;
while (i++ < n)
printf(s[(!(i%3))|((!(i%5))<<1)], i);
}
int main() {
fizzbuzz(100);
return 0;
}