我可能会在这里丢失一些非常基本的东西。但我不知道如何弄清这个基本的东西。当我将T设置为10并将dt设置为0.1时,我应该得到结果101,但我得到的结果为100.为什么这样呢?算术运算给出不正确的结果
n_sim_steps = (int)(T/dt) + 1
而且,如果我执行这个作为Eclipse的一个表,它返回101,但它的代码导致100
我可能会在这里丢失一些非常基本的东西。但我不知道如何弄清这个基本的东西。当我将T设置为10并将dt设置为0.1时,我应该得到结果101,但我得到的结果为100.为什么这样呢?算术运算给出不正确的结果
n_sim_steps = (int)(T/dt) + 1
而且,如果我执行这个作为Eclipse的一个表,它返回101,但它的代码导致100
应该
n_sim_steps = (int)(T/dt + 0.5) + 1
你是一个受害者precission loss
10/0.1
可能99.999999999999
因为这种损失和可转换回int
为99
。添加0.5
,然后铸造将确保结果四舍五入。
您最好使用ceil函数。
函数签名
double ceil (double x);
像小区(2.3)将结果3
是不是会好一些加1,如果是这样的话?如果我的结果是99.499999999比添加0.5会是一个问题。 – Shaun 2014-12-03 09:27:07
@Shaun不,为了四舍五入加0.5是更好的,因为错误会很小。如果结果反而是100.00001,那么加1会很糟糕。 “99.499999999”将被舍入到“99”,这是正确的。另外加0.5'只适用于正数。将负数减去“-0.5”。 – 2014-12-03 13:08:44