我遇到了浮點算術的一些問題,並不準確。我試圖根據加權公式計算得分,其中每個輸入變量的重量大約是下一個重要變量的20倍。然而,輸入是實數,所以我最終使用了double來存儲結果。以下代碼存在丟失E1和E2之間差異的問題。如何解決C++中浮點運算的舍入問題?
此代碼對性能非常敏感,所以我需要爲這個問題找到一個有效的答案。我想我的輸入乘以一百,然後用一個int(因爲這足夠精確,我認爲),但我懷疑這是最好的解決方案,因此是一個問題。
#include <iostream>
int main()
{
double score1, score2;
float a = 2.75 ;
float b = 5.25 ;
float c = 5.25 ;
float d = 2.75 ;
float E1 = 3 ;
float E2 = 6 ;
score1 = 20 * b - 1 * a + 0.05 * d /* - 0.0025 * c*/ + 0.0001 * E1 ;
score2 = 20 * b - 1 * a + 0.05 * d /* - 0.0025 * c*/ + 0.0001 * E2 ;
std::cout << score1 << std::endl;
std::cout << score2 << std::endl;
std::cin.get();
return 0;
}
//ouputs:
//102.388
//102.388
浮點是有限的,即它不能代表所有的浮點數,有很多關於它的信息的。 – Drakosha 2010-12-02 20:20:51
你可以使用雙。限制自己漂浮的限制效用是有限的(除了存儲空間,除非你處於非常特殊的情況下不應該是個問題)。 – 2010-12-02 20:24:14