#ifndef FIXED_POINT_H #define FIXED_POINT_H #include #include struct fp_t { std::int32_t raw; static constexpr fp_t from_raw(std::int32_t r) { return fp_t{r}; } static constexpr fp_t from_int(std::int32_t i) { return fp_t{i << 16}; } fp_t operator+(const fp_t& other) const; fp_t operator-(const fp_t& other) const; bool operator==(const fp_t& other) const; }; static_assert(std::is_trivially_copyable_v, "fp_t must remain trivially copyable for rollback determinism"); static_assert(sizeof(fp_t) == 4, "fp_t must stay 4 bytes — check for unexpected padding"); #endif // !FIXED_POINT_H