#cpp
Есть код: 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?
Ответы
Ответ 1
Ответ на более "широкий" вопрос. Да, одинаковое двоичное представление гарантировано. Без вариантов. В противном случае (помимо просто абсурдности) были бы возможны всякие интересные штуки например, при: double a = 3.14; операция a = a; меняла бы двоичное представление a.Ответ 2
Если компилятор случайно подставит константу в выражение как long double, а переменная будет double, то неожиданно окажется, что они всё-таки не равны. Так что лучше не надо, если только ты не стопроцентно уверен, что твоя константа точно представима в типе double.
Комментариев нет:
Отправить комментарий