Страницы

Поиск по вопросам

воскресенье, 12 мая 2019 г.

Безопасно ли сравнивать переменные с присвоенными значениями константы между собой?

Есть код:
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

Комментариев нет:

Отправить комментарий