fixedpoint

package
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 19, 2026 License: Apache-2.0 Imports: 2 Imported by: 0

Documentation

Overview

Package fixedpoint 提供 Q32.32 定点数原语,用于帧同步/状态同步场景下的跨平台 确定性数学计算。

解决的问题:帧同步要求"相同输入在任何机器上计算结果完全一致",但不同 CPU 的 浮点运算(IEEE 754 舍入、FMA 指令、x87 80 位寄存器)可能产生 1 ULP 级别的差异, 积累后导致不同步(desync)。定点数用整数运算模拟小数,彻底消除浮点不确定性。

格式:Q32.32 — 用 int64 表示,高 32 位为整数部分,低 32 位为小数部分。 精度约 2.3e-10(远超游戏物理需求),整数范围 ±2^31 ≈ ±21 亿。

与相邻原语的关系:

  • gameloop/match 的 OnTick 内使用 fixedpoint 做物理计算,保证确定性;
  • snapbuf 存的快照中坐标/速度用 fixedpoint.Fixed 而非 float64;
  • loot 如需确定性抽取,可将权重转为 Fixed 做累加比较。

并发安全:Fixed 是值类型(int64),无共享状态。Vec2 亦为值类型。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Fixed

type Fixed int64

Fixed 是 Q32.32 定点数,用 int64 的低 32 位表示小数、高 32 位表示整数。 零值即 0。

func Clamp

func Clamp(v, lo, hi Fixed) Fixed

Clamp 限制到 [lo, hi] 区间。

func Dist

func Dist(a, b Vec2) Fixed

Dist 两点距离。

func DistSq

func DistSq(a, b Vec2) Fixed

DistSq 两点距离的平方。

func FromFloat64

func FromFloat64(f float64) Fixed

FromFloat64 把浮点数转为定点数(仅用于初始化常量/配置,运行时应避免)。

func FromFrac

func FromFrac(num, denom int64) Fixed

FromFrac 用分子/分母构造定点数(纯整数运算,无浮点)。denom 为 0 时 panic。

func FromInt

func FromInt(n int) Fixed

FromInt 把整数转为定点数。

func FromInt64

func FromInt64(n int64) Fixed

FromInt64 把 int64 转为定点数。

func Lerp

func Lerp(a, b, t Fixed) Fixed

Lerp 线性插值:a + (b-a)*t,t 为 [0,1] 的定点数。

func Max

func Max(a, b Fixed) Fixed

Max 返回较大值。

func Min

func Min(a, b Fixed) Fixed

Min 返回较小值。

func Raw

func Raw(v int64) Fixed

Raw 直接用原始 int64 值构造(高级用途:反序列化/网络传输)。

func Sqrt

func Sqrt(a Fixed) Fixed

Sqrt 定点数平方根(牛顿迭代法,纯整数运算,确定性)。负数 panic。

func (Fixed) Abs

func (a Fixed) Abs() Fixed

Abs 绝对值。

func (Fixed) Add

func (a Fixed) Add(b Fixed) Fixed

Add 加法。

func (Fixed) Ceil

func (a Fixed) Ceil() Fixed

Ceil 向上取整到最近的整数定点数。

func (Fixed) Div

func (a Fixed) Div(b Fixed) Fixed

Div 除法。b 为 0 时 panic。

func (Fixed) Float64

func (a Fixed) Float64() float64

Float64 转为浮点(仅用于调试/日志,勿用于确定性计算)。

func (Fixed) Floor

func (a Fixed) Floor() Fixed

Floor 向下取整到最近的整数定点数。

func (Fixed) Int

func (a Fixed) Int() int

Int 截断为整数(向零取整)。

func (Fixed) Int64

func (a Fixed) Int64() int64

Int64 截断为 int64(向零取整)。

func (Fixed) Mul

func (a Fixed) Mul(b Fixed) Fixed

Mul 乘法(128 位中间结果防溢出)。

func (Fixed) Neg

func (a Fixed) Neg() Fixed

Neg 取反。

func (Fixed) Raw

func (a Fixed) Raw() int64

Raw 返回底层 int64(序列化/网络传输)。

func (Fixed) Round

func (a Fixed) Round() Fixed

Round 四舍五入到最近的整数定点数。

func (Fixed) Sign

func (a Fixed) Sign() Fixed

Sign 返回符号:-1、0 或 1(定点数)。

func (Fixed) String

func (a Fixed) String() string

func (Fixed) Sub

func (a Fixed) Sub(b Fixed) Fixed

Sub 减法。

type Vec2

type Vec2 struct {
	X, Y Fixed
}

Vec2 是二维定点数向量(值类型)。

func V2

func V2(x, y Fixed) Vec2

V2 构造 Vec2。

func (Vec2) Add

func (v Vec2) Add(o Vec2) Vec2

Add 向量加法。

func (Vec2) Cross

func (v Vec2) Cross(o Vec2) Fixed

Cross 叉积(二维叉积为标量)。

func (Vec2) Dot

func (v Vec2) Dot(o Vec2) Fixed

Dot 点积。

func (Vec2) Len

func (v Vec2) Len() Fixed

Len 向量长度(定点数牛顿迭代法求平方根)。

func (Vec2) LenSq

func (v Vec2) LenSq() Fixed

LenSq 长度的平方(避免开方,常用于距离比较)。

func (Vec2) Normalize

func (v Vec2) Normalize() Vec2

Normalize 归一化为单位向量。零向量返回零向量。

func (Vec2) Scale

func (v Vec2) Scale(s Fixed) Vec2

Scale 标量乘法。

func (Vec2) String

func (v Vec2) String() string

func (Vec2) Sub

func (v Vec2) Sub(o Vec2) Vec2

Sub 向量减法。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL