いくつかのコードを調べたところ、次のことがわかりました。
#ifdef trunc
# undef trunc
#endif
inline float trunc(float x)
{
return (x < 0.0f) ? float(int(x)) : float(int(x));
}
inline double trunc(double x)
{
return (x < 0.0f) ? double(int(x)) : double(int(x));
}
inline long double trunc(long double x)
{
return (x < 0.0f) ? (long double)(int(x)) : (long double)(int(x));
}
#endif // _WIN32
もちろん、?: 演算子は、条件式に関係なく、常に同じ値を返します。一方、著者には、これらの関数をこのように書く理由があったと思います。しかし、私はそれを見つけることができません。何か案が ?これはただのエラー(タイプミス)ですか?
[編集] 著者からの返信:
良い点 - これは round() の定義からの熱狂的なカットアンドペーストです。以下は問題ありません(intの範囲の制限を除く):
inline float trunc(float x)
{
return float(int(x));
}
inline double trunc(double x)
{
return double(int(x));
}
inline long double trunc(long double x)
{
return (long double)(int(x));
}