为什么c ++给出了不同的答案,看起来像是相同的计算?

Pal*_*han 0 c++ floating-point

我在一个简单的main中有以下源代码:

int main(int argc, char** argv)
{
    double x = atof(argv[1]);
    double y = atof(argv[2]);

    double res = x + std::floor((y - x) * .5 * 100 + .5)*0.01;

    std::cout << res << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

如果我用75.21 75.22运行上面它给了我75.22但如果我用7.21和7.22运行它它给了我7.21.这两个数字相差0.01,所以我不明白为什么会这样?

Mat*_*ine 5

简短的回答:浮点值不精确.

答案很长:每个计算机科学家应该知道浮点运算