浮動小数点値がテンプレート パラメーターとして許可されない理由
C では、次のように浮動小数点値をテンプレート パラメーターとして使用しようとします。次のコードの場合、結果は次のようになりますエラー:
GenericClass<float, 4.6f> gcFloat; error: `float' is not a valid type for a template constant parameter
標準の禁止事項
C 11 標準によれば、非型テンプレート引数は次のいずれかである必要があります:
ただし、浮動小数点値はこれらのいずれにも当てはまりません
推論
この制限の主な理由は、浮動小数点計算の不正確な性質です。浮動小数点計算は正確に表現できないため、テンプレート引数として使用すると予期しない動作が発生する可能性があります。たとえば、次のコードは、丸めの違いが考えられるため、意図したとおりに動作しない可能性があります。
func<1/3.f>(); func<2/6.f>();
代替ソリューション
浮動小数点値をテンプレート引数として表すには、次のことを考慮してください。 C 11 の高度な定数式 (constexpr) を使用して、コンパイル時に浮動小数点値の分子と分母を計算します。これらは個別の整数引数として渡すことができます。ただし、互いに近い浮動小数点値が同じ分子/分母比をもたらすように、しきい値を定義することが重要です。
以上が浮動小数点数を C テンプレート パラメータとして使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。