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