为什么设置一个const变量(将以相同的值存储)导致一旦划分出不同的结果?

问题描述 投票:6回答:2

漂亮的basic代码:

#include <iostream>

int main() {
    std::cout.precision(100);

    double a            = 9.79999999999063220457173883914947509765625;
    double b            = 0.057762265046662104872599030613855575211346149444580078125;
    const double bConst = 0.057762265046662104872599030613855575211346149444580078125;
    double c            = a * b;

    std::cout << "        a: " << a << std::endl;
    std::cout << "        b: " << b << std::endl;
    std::cout << "   bConst: " << bConst << std::endl;
    std::cout << "        c: " << c << std::endl << std::endl;  
    std::cout << "      c/b: " << c / b << std::endl;   
    std::cout << " c/bConst: " << c / bConst << std::endl;  
}

哪个输出:

        a: 9.79999999999063220457173883914947509765625
        b: 0.057762265046662104872599030613855575211346149444580078125
   bConst: 0.057762265046662104872599030613855575211346149444580078125
        c: 0.5660701974567474703547986791818402707576751708984375

      c/b: 9.7999999999906304282148994388990104198455810546875
 c/bConst: 9.79999999999063220457173883914947509765625

如你所见,bbConst似乎使用相同的值进行处理 - 即它打印相同的0.057762265046662104872599030613855575211346149444580078125值。所以我猜它们都是“存储”的。唯一的区别是b不是const

然后,我做了两次相同的c / b操作:一次使用b,另一次使用bConst

如您所见,它会导致两种不同的结果。这让我很奇怪。

你能从技术上解释为什么会这样吗?

c++ optimization floating-point const
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.