2

いくつかのコードを調べたところ、次のことがわかりました。

#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));
}
4

2 に答える 2

0

このコードは、両方の条件に対して同じ出力を返します。これは単なる冗長性であり、さらに、float(int(x))意味がありません。int(x)数値を整数に変換するため、再度 float または double に変換しても違いはなく、返される変数の型のみが異なります。

于 2013-08-09T15:03:50.137 に答える