Есть ли способ построить функцию constexpr, чтобы получить битовое представление double? - PullRequest
1 голос
/ 19 апреля 2019

Существует ли стандартный способ создания функции constexpr, которая позволяет преобразовывать double в его 64-битное представление:

constexpr uint64_t double_to_uint64_t(double d) {
   ??????
}

Так что

constexpr uint64_t two_bits = double_to_uint64_t(2.0);

будет компилироваться?

Интересен и обратный метод (uint64 для удвоения).

1 Ответ

5 голосов
/ 19 апреля 2019

Не раньше, чем C ++ 20.Все обычные приемы являются либо полностью запрещенными (reinterpret_cast), либо неопределенным поведением, и UB становится плохо сформированным при выполнении во время компиляции.

C ++ 20 обеспечивает std::bit_cast, что делает двоичное преобразованиемежду двумя типами, при условии, что они оба легко копируются и имеют одинаковый размер.И функция constexpr, так что вы можете использовать ее во время компиляции.

...