2014-12-03 97 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