c++ - double 与整数精度的乘法

标签 c++

我有 3.4 的两倍。但是,当我将它与 100 相乘时,它给出的是 339 而不是 340。这似乎是由 double 的精度引起的。我该如何解决这个问题?

谢谢

最佳答案

首先是怎么回事:

  1. 3.4 不能精确表示为二进制小数。因此,实现选择最接近的可表示二进制分数。我不确定它是否总是向零舍入,但在您的情况下,表示的数字确实较小。
  2. 转换为整数截断,即使用最接近绝对值较小的整数。
  3. 由于两种转换都偏向同一个方向,因此您总是会遇到舍入误差。

现在你需要知道你想要什么,但你可能想使用对称舍入,即找到最接近的整数,无论​​是更小还是更大。这可以实现为

#include <cmath>
int round(double x) { std::floor(x + 0.5); } // floor is provided, round not

int round(double x) { return x < 0 ? x - 0.5 : x + 0.5; }

我不完全确定它确实是向零四舍五入,所以如果你使用它请稍后验证。

关于c++ - double 与整数精度的乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6041295/

相关文章:

c++获取txt文件中的一行数据

C++构造函数格式

c++ - 如何配置 visual studio 2008 以根据配置选择正确的 .lib?

c++ - 继承中的虚拟调用

c++ - 泰勒级数展开为 constexpr

c++ - 如何从自身加入 std::thread(在 C++11 中)

c++ - 是否有类似于 Windows 的 Valgrind Memcheck 工具在出现免费错误后调试使用?

c++ - 来自 g++ 编译的 String.h 错误

c++, c++11, std::atomic 成员函数

c++ - 具有重复值的 Set_Intersection