28 std::numeric_limits<double>::infinity(),
29 -std::numeric_limits<double>::infinity(),
30 std::numeric_limits<double>::min(),
31 -std::numeric_limits<double>::min(),
32 std::numeric_limits<double>::max(),
33 -std::numeric_limits<double>::max(),
34 std::numeric_limits<double>::lowest(),
35 -std::numeric_limits<double>::lowest(),
36 std::numeric_limits<double>::quiet_NaN(),
37 -std::numeric_limits<double>::quiet_NaN(),
38 std::numeric_limits<double>::signaling_NaN(),
39 -std::numeric_limits<double>::signaling_NaN(),
40 std::numeric_limits<double>::denorm_min(),
41 -std::numeric_limits<double>::denorm_min(),
50 if constexpr (std::numeric_limits<double>::is_iec559) {
52 uint64_t encoded_in_memory;
53 std::copy((
const unsigned char*)&d, (
const unsigned char*)(&d + 1), (
unsigned char*)&encoded_in_memory);
54 assert(encoded_in_memory == encoded);
58 assert(std::isnan(d) == std::isnan(d_deserialized));
59 assert(std::isnan(d) || d == d_deserialized);