我正在C开发一个特殊用途数学功能图书馆。 我需要为图书馆提供处理单一视距和双重视距的能力。 这里的重要一点是,“单一”功能应当使用奥文特内部的“单一”算术(“双重”功能)。
举例来说,请见LAPACK(Fortran),其中提供了每项职能的两个版本(SINGLE和DOUBLE)。 C 数学图书馆(Example,expf和exp)。
为了澄清,我要支持类似以下(持续)例子:
float MyFloatFunc(float x) {
return expf(-2.0f * x)*logf(2.75f*x);
}
double MyDoubleFunc(double x) {
return exp(-2.0 * x)*log(2.75*x);
}
我对以下做法进行了思考:
利用宏观方法确定功能名称。 这仍然需要两个单独的源代码基:
#ifdef USE_FLOAT #define MYFUNC MyFloatFunc #else #define MYFUNC MyDoubleFunc #endif
利用宏观处理浮动点类型。 这使我能够分享两个不同版本的编码基础:
#ifdef USE_FLOAT #define NUMBER float #else #define NUMBER double #endif
仅仅开发两个单独的图书馆,并设法挽救头痛。
是否有任何人提出建议或补充建议?