造成这种舍入错误的原因是什么?

时间:2016-04-27 15:23:34

标签: c++ math double rounding

我认为这个问题与浮点数的不准确性有关,但我并不完全确定。这可能是一件非常明显的事情,我失踪了,但它让我停留了很长一段时间,所以冒着听起来很愚蠢的风险,我想我会在这里问,希望有人可以解释发生了什么,也许可以提供另一种选择绕过这个问题的方法。

所以我想做的计算是以下

double x = 10.0/3.0;
double y = ceil(x*11 + x);

在我的脑海里,这应该相当简单,应该等于40,但它给了我答案41,这导致我的程序出错。

令我困惑的原因是因为如果我用8而不是11做同样的事情

double x = 10.0/3.0;
double y = ceil(x*8 + x);

我得到了正确的答案30,而不是31。经过一些进一步的测试,我得到了14和17的错误答案,但不是20。

0 个答案:

没有答案