c++ - 截断并转换为 ceiled double 的 int

标签 c++ floating-point rounding truncation

当对 double 值执行 std::ceil 时,该值将四舍五入为整数。所以3.3会变成4.0。可以转换或截断为 int。这将“切断”逗号后的部分。所以:

int foo = (int)std::ceil(3.3);

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

但实际上我从未见过这种行为发生。我可以安全地假设任何实现都会返回 4 吗?还是只有 IEEE-754 执行此操作。还是我只是运气好?

最佳答案

四舍五入(或上限) double 将始终、始终、始终准确。

对于2^(m+1)以下的 float ,其中m是尾数位数,所有整数都有精确表示,所以可以精确表示结果。

对于大于 2^(m+1) 的 float ...它们已经是整数。如果您考虑一下,这是有道理的:没有足够的尾数位来向下延伸到小数点的右边。所以再次舍入/上限是准确的。

关于c++ - 截断并转换为 ceiled double 的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263213/

相关文章:

c++ - 原始指针隐式转换为常量指针,需要与用户类型相同

javascript - 在javascript中将 float 舍入到下一个整数

ruby - 具有不同精度的纬度和经度的浮点计算

python - 匹配 Python 字典中的实数键

sql-server - SQL Server 中的日期时间四舍五入为最接近的 15 分钟

java - 使用 BigDecimals 舍入区域

C++——什么是运算符.*?

c++ - 官方c++文档在哪里

c++ - 通过 TCP 发送多个字符数组的最快方法

c - 浮点乘法执行速度较慢,具体取决于 C 中的操作数