いくつかの異なるアルゴリズム設計のベンチマークを試みています。ユーザーが強制する型安全性を内部的に型安全にしないようにして、関数を一般化したいと考えています。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void * foo1(unsigned n)
{
unsigned i;
unsigned long sum = 0;
void * psum = ∑
for(i = 0; i < n; ++i)
++sum;
return psum;
}
...
int main(void)
{
int i;
unsigned n;
unsigned long sum = 0;
void *(*foo[6])(unsigned) = {&foo1, &foo2, &foo3, &foo4, &foo5, &foo6};
unsigned n_max[6] = {1000000001, 1000001, 10001, 1000001, 101, 1001};
clock_t start, end;
for(i = 0; i < 6; ++i){
n = 1;
do{
start = clock();
sum = *(unsigned long *)(*foo[i])(n);
end = clock();
printf("%d|%lu|%.6f\n", n, sum, (double) (end - start) / CLOCKS_PER_SEC);
n *= 10;
}while(n < n_max[i]);
}
return 0;
}
私の質問は、具体的には、foo() 関数を実際よりも汎用的にして、すべての型に使用できるようにする方法についてです。
そのために、私にはアイデアがありましたが、よくわかりません。符号付きデータ型が符号なしにキャストされ、他の符号なしデータ型によって変更された場合、実行された算術演算は固執しますか、それとも誤った演算が発生しますか?