私はC言語で特殊目的の数学関数のライブラリを開発しています。ライブラリが単精度と倍精度の両方を扱えるようにする必要があります。ここでの重要な点は、 "single"関数は内部的に "single"算術のみを使うべきであるということです( "double"関数の場合)。単精度浮動小数点と倍精度浮動小数点の両方を扱うCコードの適切な設計?
図のように、それぞれの機能(SINGLEとDOUBLE)の2つのバージョンを提供するLAPACK(Fortran)を見てください。また、C数学ライブラリ(例: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);
}
を:
関数名用のマクロを使用して。これには依然として、2つの別々のソースコードベースが必要です。
#ifdef USE_FLOAT #define MYFUNC MyFloatFunc #else #define MYFUNC MyDoubleFunc #endif
浮動小数点型のマクロを使用します。
#ifdef USE_FLOAT #define NUMBER float #else #define NUMBER double #endif
わずか2つの別々のライブラリを開発し、頭痛を保存しようとして忘れ:これは私は2つの異なるバージョンは全体のコードベースを共有することができます。
推奨または推奨事項はありますか?
はい、この優秀な点に感謝します。ここでの目標は、 "single"の実行速度を "double"の精度上の利点とトレードオフすることです。 –