0

いくつかの異なるアルゴリズム設計のベンチマークを試みています。ユーザーが強制する型安全性を内部的に型安全にしないようにして、関数を一般化したいと考えています。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void * foo1(unsigned n)
{
    unsigned i;
    unsigned long sum = 0;
    void * psum = &sum;

    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() 関数を実際よりも汎用的にして、すべての型に使用できるようにする方法についてです。

そのために、私にはアイデアがありましたが、よくわかりません。符号付きデータ型が符号なしにキャストされ、他の符号なしデータ型によって変更された場合、実行された算術演算は固執しますか、それとも誤った演算が発生しますか?

4

0 に答える 0