Есть код:
const double Pi = 3.14;
double a = Pi;
double b = Pi;
кода типа:
double x = 3.;
double b = (4.0 - x) * Pi;
в программе быть не может, т.е. всегда идет присваивание var = Pi
Корректно ли в этом (и только в этом) случае сравнивать a == b?
Чуть добавлю. Присвение константы в программе может выглядеть примерно так:
double b = some_expression;
if (b < Pi + epsilon && Pi - epsilon < b) b = Pi;
И никак иначе.
П.С. Использвание числа, похожего на математическое "пи" - только для примера, к реальности отношения не имеет.
Попробуем сформулировать вопрос более широко. Есть две строки кода, идущие подряд.
double x = some_value;
double y = x;
// not double y = some_expression_that_equal_to_x;
Типы x, y одинаковые, это важно. Гарантированно ли одинаковое двоичное представление x и y?
Ответ
Ответ на более "широкий" вопрос. Да, одинаковое двоичное представление гарантировано. Без вариантов. В противном случае (помимо просто абсурдности) были бы возможны всякие интересные штуки например, при:
double a = 3.14;
операция
a = a;
меняла бы двоичное представление a
Комментариев нет:
Отправить комментарий