漂亮的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
如你所见,b
和bConst
似乎使用相同的值进行处理 - 即它打印相同的0.057762265046662104872599030613855575211346149444580078125
值。所以我猜它们都是“存储”的。唯一的区别是b
不是const
。
然后,我做了两次相同的c / b
操作:一次使用b
,另一次使用bConst
。
如您所见,它会导致两种不同的结果。这让我很奇怪。
你能从技术上解释为什么会这样吗?