CTZ*_*tef 2 c++ conditional-statements
通过一些代码,我发现了这个:
#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
Run Code Online (Sandbox Code Playgroud)
当然,无论条件表达式如何,?:运算符总是在每种情况下返回一个相同的值.另一方面,我猜作者有理由以这种方式编写这些函数; 我找不到一个.任何的想法 ?这只是一个错误(拼写错误)吗?
[编辑]作者的回复:
好点 - 这只是圆形()定义的过度剪切和粘贴.以下应该没问题(除了对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));
}
Run Code Online (Sandbox Code Playgroud)
这段代码看起来不对.
我的猜测是他们意味着更像这样的东西:
inline float trunc(float x)
{
return (x < 0.0f) ? -float(int(-x)) : float(int(x));
}
Run Code Online (Sandbox Code Playgroud)
但即便如此,这也是可疑的.我相信int(x)总是执行截断,所以即使这样,两个分支也?:应该产生相同的结果.
如果舍入模式做事情的类型转换(和片刻的思索后,我不知道它),你可能真的要使用这样的函数modf,modff或modfl打破数为整数和小数部分,并丢弃小数一部分.
例如:
inline float trunc(float x)
{
float int_part;
modf(x, &int_part);
return int_part;
}
Run Code Online (Sandbox Code Playgroud)
编辑:另一个观察.对于不适合的值,原始代码将失败int.又一次打击它.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |