我可能會在這裏丟失一些非常基本的東西。但我不知道如何弄清這個基本的東西。當我將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