2014-12-03 56 views
1

我可能会在这里丢失一些非常基本的东西。但我不知道如何弄清这个基本的东西。当我将T设置为10并将dt设置为0.1时,我应该得到结果101,但我得到的结果为100.为什么这样呢?算术运算给出不正确的结果

n_sim_steps = (int)(T/dt) + 1 

而且,如果我执行这个作为Eclipse的一个表,它返回101,但它的代码导致100

回答

5

应该

n_sim_steps = (int)(T/dt + 0.5) + 1 

你是一个受害者precission loss

10/0.1可能99.999999999999因为这种损失和可转换回int99。添加0.5,然后铸造将确保结果四舍五入。

+0

是不是会好一些加1,如果是这样的话?如果我的结果是99.499999999比添加0.5会是一个问题。 – Shaun 2014-12-03 09:27:07

+0

@Shaun不,为了四舍五入加0.5是更好的,因为错误会很小。如果结果反而是100.00001,那么加1会很糟糕。 “99.499999999”将被舍入到“99”,这是正确的。另外加0.5'只适用于正数。将负数减去“-0.5”。 – 2014-12-03 13:08:44

0

您最好使用ceil函数。

函数签名

double ceil (double x); 

像小区(2.3)将结果3