簡體   English   中英

浮點數學不正確?

[英]Incorrect floating point math?

這是一個讓我在過去幾個小時里完全感到困惑的問題......

我的程序中有一個硬編碼的等式:

double s2;

s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42;

每次我運行該程序時,計算機會吐出3作為答案,但是手動進行數學計算,我得到4.更進一步,在將方程式輸入Matlab之后,我也得到了答案4.這里有什么進展?

我唯一能想到的就是這里出錯了將是錯誤的。 然而,最多有5個舍入誤差,再加上使用雙精度數學,我的最大誤差將非常小,所以我懷疑這是問題所在。

有誰能提供任何解決方案?

提前致謝,

-Faken

你實際上並沒有在那里進行浮點數學運算,你正在進行整數運算,這將使得除法的結果成為可能。

在C ++中,5/4 = 1, 而不是 1.25 - 因為5和4都是整數,所以結果將是一個整數,因此結果的小數部分被丟棄。

另一方面,5.0 / 4.0將等於約。 1.25因為5.0和4.0中至少有一個是浮點數,所以結果也是浮點數。

你將整數除法與浮點除法混淆了。 3是整數除法的正確答案。 如果將這些值轉換為浮點數,您將獲得4。

其中一些是使用整數運算進行評估的。 嘗試在數字中添加一個小數位,例如6.0而不是6來告訴編譯器你不需要整數運算。

s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42;

收益率3

s2 = -(0.*13.)/84.+6./42.-0./84.+24./12.+(6.*13.)/42.;

做你所期待的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM