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::add

    fn Fixed::add(self : Fixed, other : Fixed) -> Fixed

    Fixed::compare

    fn Fixed::compare(self : Fixed, other : Fixed) -> Int

    Fixed::div

    fn Fixed::div(self : Fixed, other : Fixed) -> Fixed

    Fixed::equal

    fn Fixed::equal(Fixed, Fixed) -> Bool

    显式声明运算符方法提升为普通方法。

    新版编译器已弃用「实现自动提升」,不声明会在 moon check --deny-warn 下 变成错误(W0079)。

    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::mul

    fn Fixed::mul(self : Fixed, other : Fixed) -> Fixed

    Fixed::neg

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

    Fixed::not_equal

    fn Fixed::not_equal(x : Fixed, y : Fixed) -> Bool

    显式声明运算符方法提升为普通方法。

    新版编译器已弃用「实现自动提升」,不声明会在 moon check --deny-warn 下 变成错误(W0079)。

    Fixed::op_ge

    fn Fixed::op_ge(x : Fixed, y : Fixed) -> Bool

    Fixed::op_gt

    fn Fixed::op_gt(x : Fixed, y : Fixed) -> Bool

    Fixed::op_le

    fn Fixed::op_le(x : Fixed, y : Fixed) -> Bool

    Fixed::op_lt

    fn Fixed::op_lt(x : Fixed, y : Fixed) -> Bool

    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::sub

    fn Fixed::sub(self : Fixed, other : Fixed) -> Fixed

    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