Sign in

    weopqrst/moonroll/fixed does not have a README file

    Fixed

    pub struct Fixed {
    v : Int64
    } derive(Eq)

    Q16.16 定点数。

    为什么需要它:回滚同步要求「同一串输入在任何后端、任何 CPU 上产生逐位相同的轨迹」。 浮点运算在 js 与 wasm-gc 上实测一致(见 README),但 native 与跨平台仍受 编译器优化与 FMA 收缩影响。Fixed 用整数运算,语义由 MoonBit 的 Int64 保证, 不依赖任何浮点库。

    内部表示:v = value * 65536。所有中间运算走 Int64, 因此实际可用范围是 Int32 区间,约 [-32768, 32767]。
    impl Add for Fixed
    impl Compare for Fixed
    impl Div for Fixed
    impl Mul for Fixed
    impl Neg for Fixed
    impl Sub for Fixed

    Fixed::abs

    fn Fixed::abs(self : Fixed) -> Fixed

    Fixed::from_double

    fn Fixed::from_double(value : Double) -> Fixed

    浮点数 -> 定点数(四舍五入,仅用于初始化与测试,不参与模拟核心)。

    Fixed::from_int

    fn Fixed::from_int(value : Int) -> Fixed

    整数 -> 定点数。

    Fixed::from_raw

    fn Fixed::from_raw(v : Int64) -> Fixed

    从原始定点整数构造(v = value * 65536)。

    Fixed::raw

    fn Fixed::raw(self : Fixed) -> Int64

    取出原始定点整数,用于序列化与状态哈希。

    Fixed::sqrt

    fn Fixed::sqrt(self : Fixed) -> Fixed

    定点开方:sqrt(x) 仍是 Q16.16。

    推导:sqrt(v / 2^16) * 2^16 = sqrt(v * 2^16), 因此对 v << 16 求整数平方根即可。

    Fixed::to_double

    fn Fixed::to_double(self : Fixed) -> Double

    定点数 -> 浮点数(仅用于渲染与打印,不参与模拟核心)。

    clamp

    fn clamp(value : Fixed, lo : Fixed, hi : Fixed) -> Fixed

    lerp

    fn lerp(a : Fixed, b : Fixed, t : Fixed) -> Fixed

    线性插值:a + (b - a) * t。

    Source Files