The header, standardized in C 1999, provides type-generic calls to the routines in and . After you include , the source text "sin(x)" will call sinl if x is long double, sin if x is double, and sinf if x is float.
あなたはまだ "3.1"または "3.1f"を適切に使うように定数を条件付けする必要があります。あなたのニーズやより美的に見えるものに応じて、さまざまな統語テクニックがあります。 float精度で正確に表現された定数については、単にfloat形式を使用することができます。たとえば、「y = .5f * x」は、xがdoubleの場合、.5fを.5に自動的に変換します。しかし、 "sin(0.5f)"はsinf(0.5f)を生成しますが、これはsin(0.5)よりも正確ではありません。
条件設定を1つの明確な定義に減らすことができます。
#if defined USE_FLOAT
typedef float Float;
#else
typedef double Float;
#endif
次に、定数を以下のように使用することができます:
const Float pi = 3.14159265358979323846233;
Float y = sin(pi*x);
Float z = (Float) 2.71828182844 * x;
まったく満足できるものではないかもしれません。なぜなら、二重に変換された後、浮動小数点数が浮動小数点に直接変換された数値よりも正確さが低い場合があるからです。したがって、上記のマクロでは、C(数字)が必要に応じて数字に接尾辞を付加する方がよい場合があります。