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