Довольно 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
.
*.1020 * Как видите, это приводит к двум разным результатам.И это заставляет меня задуматься.
Можете ли вы технически объяснить, почему это происходит?