有没有办法构造一个 constexpr 函数来获取双精度的位表示?
Is there a way to construct a constexpr function to get bit representation of a double?
是否有一种标准方法来构造允许将双精度转换为 64 位表示的 constexpr 函数:
constexpr uint64_t double_to_uint64_t(double d) {
??????
}
所以
constexpr uint64_t two_bits = double_to_uint64_t(2.0);
会编译吗?
反向方法(uint64 到 double)也很有趣。
直到 C++20。所有常用的技巧要么被完全禁止(reinterpret_cast
)要么是未定义的行为,并且 UB 在编译时执行时变得格式错误。
C++20 提供了 std::bit_cast
,它在两种类型之间进行二进制转换,只要它们都是普通可复制的并且具有相同的大小。并且函数是constexpr
,所以你可以在编译时使用它。
是否有一种标准方法来构造允许将双精度转换为 64 位表示的 constexpr 函数:
constexpr uint64_t double_to_uint64_t(double d) {
??????
}
所以
constexpr uint64_t two_bits = double_to_uint64_t(2.0);
会编译吗?
反向方法(uint64 到 double)也很有趣。
直到 C++20。所有常用的技巧要么被完全禁止(reinterpret_cast
)要么是未定义的行为,并且 UB 在编译时执行时变得格式错误。
C++20 提供了 std::bit_cast
,它在两种类型之间进行二进制转换,只要它们都是普通可复制的并且具有相同的大小。并且函数是constexpr
,所以你可以在编译时使用它。