2015-05-12 59 views
-3

心中已經遇到了另一個異常:C++返回7.45058而不是0

float T = 19.0/99.0; 
float moo = (99.0 * T) - 19.0; 

如預期,T = 0.191919,然而 'も' 是指爲0而是爲7.450586。 我只能假設某種形式的鑄造再次需要某處。

+0

嘗試使用'double'而不是'float'!另外一個很好的閱讀:[每個計算機科學家應該知道的關於浮點算法](http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf) –

+2

我得到7.45058e-08,a非常小的數字。你也可能做到了。 – molbdnilo

+2

你確定它是'7.450586',而不是'7.450586e-008'或者其他一些非常小的指數? –

回答

0

你的代碼改成這樣,你會在哞

浮動T = 19.0 ˚F/99.0 ˚F得到0; float moo =(99.0 f * T) - 19.0 f;

另外moo沒有這個值不是7.45,它是幾乎爲零的7.45058e-08。

+0

我想這是某種編譯器優化。在ideone我仍然得到7.45058e-08 – Vinzenz

+0

我使用蘋果LLVM 6.1 – exs

0

由於任何浮點數在C++中都用2的補碼錶示,所以在操作浮點值時通常會得到近似值。所以7.450586e-008是精確的行爲。如果你需要更多的精度使用雙。