ST3*_*ST3 -1 c++ floating-point undefined-behavior
今天发现VS2010不支持round
C++项目中的功能.有关该功能的信息已在此处找到.还注意到也没有trunc
功能.
所以尝试了一些东西并注意到一些可能有助于这种情况的行为.
float a = 2.999;
int b = (int)a; //gives 2
Run Code Online (Sandbox Code Playgroud)
float a = -2.999;
int b = (int)a; //gives -2
Run Code Online (Sandbox Code Playgroud)
这可以作为截断,所以我可以使用它,但是我不想使用导致未定义行为的代码.所以想问一下这是定义的还是未定义的行为.
编辑:因为我正在使用VS2008,所以我不会问C++ 11.
它明确定义于
4.9浮动积分转换[conv.fpint]
1浮点类型的prvalue可以转换为整数类型的prvalue.转换转发; 也就是说,丢弃小数部分.如果截断的值无法在目标类型中表示,则行为未定义.[ 注意:如果目的地类型是
bool
,请参见4.12.- 结束说明 ]