我遇到了浮点算术的一些问题,并不准确。我试图根据加权公式计算得分,其中每个输入变量的重量大约是下一个重要变量的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