截断并转换为ceiled double的int

lau*_*svr 3 c++ floating-point rounding truncation

执行std::ceil双精度值时,该值将向上舍入为整数.所以3.3将成为4.0.哪个可以被铸造或截断为int.这将在逗号之后"切掉"部分.所以:

int foo = (int)std::ceil(3.3);
Run Code Online (Sandbox Code Playgroud)

所以乍一看,这将在foo中存储4个.但是,double是浮点值.所以它可能是4.0000000013.999999999.后者将被截断为3.

但实际上我从未见过这种行为.我可以安全地假设任何实现都会返回4吗?或者只是IEEE-754这样做.或者我只是幸运吗?

Sne*_*tel 5

圆形(或天花板)双精度始终始终是精确的.

对于低于2 ^(m + 1)的浮点数,其中m是mantissal位的数量,所有整数都具有精确的表示,因此可以精确地表示结果.

对于高于2 ^(m + 1)的浮点数...它们已经是整数.有意义的是,如果你考虑一下:没有足够的mantissal位向下延伸到小数点的右边.所以再次舍入/细化是准确的.