通过一些代码,我发现了这个:
#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));
}