3
« on: March 22, 2024, 06:27:07 PM »
using clang with atomic I get
Time for recursive: 1349
Time for divide-iterative: 1350
Time for multiply-iterative: 1114
Time for if-statements: 1130
Time for reverse-if-statements: 1177
Time for log-10: 3860
Time for binary chop: 1256
if instead of atomic I do
only the main function from Robert's code posted below with the addition of a pragma
#pragma clang optimize off
int main (int c, char *v[]) {
// _Atomic int i, j, k, r;
int i, j, k, r;
int s = 1;
/* Test code:
printf ("%11d %d\n", INT_MIN, count_recur(INT_MIN));
for (i = -1000000000; i != 0; i /= 10)
printf ("%11d %d\n", i, count_recur(i));
printf ("%11d %d\n", 0, count_recur(0));
for (i = 1; i != 1000000000; i *= 10)
printf ("%11d %d\n", i, count_recur(i));
printf ("%11d %d\n", 1000000000, count_recur(1000000000));
printf ("%11d %d\n", INT_MAX, count_recur(INT_MAX));
*/
/* Randomize and create random pool of numbers. */
srand (time (NULL));
for (j = 0; j < numof (rndnum); j++) {
rndnum[j] = s * rand();
s = -s;
}
rndnum[0] = INT_MAX;
rndnum[1] = INT_MIN;
/* For testing. */
for (k = 0; k < numof (rndnum); k++) {
rt[k] = (fn[1].fnptr)(rndnum[k]);
}
/* Test each of the functions in turn. */
clk[0] = clock();
for (i = 1; i < numof (fn); i++) {
for (j = 0; j < 10000; j++) {
for (k = 0; k < numof (rndnum); k++) {
r = (fn[i].fnptr)(rndnum[k]);
/* Test code:
if (r != rt[k]) {
printf ("Mismatch error [%s] %d %d %d %d\n",
fn[i].desc, k, rndnum[k], rt[k], r);
return 1;
}
*/
}
}
clk[i] = clock();
}
/* Print out results. */
for (i = 1; i < numof (fn); i++) {
printf ("Time for %s: %10d\n", fn[i].desc, (int)(clk[i] - clk[i-1]));
}
return 0;
}
my time is
Time for recursive: 658
Time for divide-iterative: 566
Time for multiply-iterative: 438
Time for if-statements: 519
Time for reverse-if-statements: 502
Time for log-10: 2730
Time for binary chop: 487
unfortunately pragmas can not be used inside a function
you cal also use __attribute__ ((optnone)) but I prefer the pragma, it's cleaner syntax and you can also turn optimize back on with #pragma clang optimize on