Documentation
¶
Overview ¶
Package mathx 提供常用的数学工具函数。
包含随机数生成、概率计算、浮点数精度处理等功能。
对比统计:小样本通过率的诚实区间估计与配对二分类差异检验。 显著水平对应的 z 由调用方传入(如 1.96)。收编自 agentkit/reportutil (v0.10.41 起单源在此,agentkit 侧消费本包)。
Index ¶
- func Clamp[T cmp.Ordered](v, lo, hi T) T
- func DivisionN(dividend, divisor float64, n int) float64
- func Floor(x float64, n int) float64
- func McNemarExact(n01, n10 int) float64
- func Probability(band []int) (index, r int)
- func ProbabilityElems(elems []float64, precise float64) []int
- func RandIntn(maxInt int) int
- func RangeRandFloat64(min, max float64) float64
- func Round(x float64, n int) float64
- func ToFixed(num float64, precise int) float64
- func WilsonCI(passed, total int, z float64) (lo, hi float64)
- type Unstable
- func (u Unstable) Around(n int) int
- func (u Unstable) AroundDuration(d time.Duration) time.Duration
- func (u Unstable) AroundFloat64(v float64) float64
- func (u Unstable) Upward(n int) int
- func (u Unstable) UpwardDuration(d time.Duration) time.Duration
- func (u Unstable) UpwardFloat64(v float64) float64
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func McNemarExact ¶
McNemarExact McNemar 精确检验(双侧):n01=甲败乙过数,n10=甲过乙败数。 返回 p 值;n01+n10=0(无任何翻转)返回 1(无差异);p 钳到 1。
func Probability ¶
Probability 根据累积概率边界返回随机选中的索引。 band 为空时返回 (0, 0)。
func ProbabilityElems ¶
ProbabilityElems 计算概率分布的累积边界。 elems 是概率值切片(所有权重必须 > 0),precise 是精度基数。 不修改输入切片(内部排序副本)。 存在 0/负权重时直接 panic:log10(precise/0) 产生 +Inf/NaN,band 会静默 退化为全 0,Probability 恒选 index 0——概率路由静默出错比快速失败更危险。
func RangeRandFloat64 ¶
RangeRandFloat64 返回 [min, max) 范围内的随机浮点数。
Types ¶
type Unstable ¶ added in v0.3.0
type Unstable struct {
// contains filtered or unexported fields
}
Unstable 围绕基准值产生比例随机抖动:Around 对称 ±deviation (典型用途是打散缓存 TTL:同批写入的 key 若 TTL 完全一致,会形成周期性 的集中失效(缓存雪崩),用抖动值错开即可缓解);Upward 单边向上 (重试退避「不得比基准更早」语义)。
u := mathx.NewUnstable(0.1) ttl := u.AroundDuration(30 * time.Minute) // ∈ [27min, 33min]
零值不可直接使用,经 NewUnstable 创建(deviation 夹到 [0,1])。
func NewUnstable ¶ added in v0.3.0
NewUnstable 创建抖动器。deviation 夹到 [0,1]:负值取 0,大于 1 取 1 (deviation>1 会让结果越过 0 甚至变号,对 TTL/数量类语义无意义)。
func (Unstable) Around ¶ added in v0.3.0
Around 返回 n ∈ [n(1-dev), n(1+dev)] 的随机整数。 deviation=0 恒等返回。适用于 TTL、数量等正数语义。
func (Unstable) AroundDuration ¶ added in v0.3.0
AroundDuration 返回 d ∈ [d(1-dev), d(1+dev)] 的随机时长。 deviation=0 恒等返回。
func (Unstable) AroundFloat64 ¶ added in v0.3.0
AroundFloat64 返回 v ∈ [v(1-dev), v(1+dev)] 的随机浮点数。 deviation=0 恒等返回。
func (Unstable) Upward ¶ added in v0.11.0
Upward 返回 n ∈ [n, n(1+dev)] 的随机整数:只向上抖动,适用于重试退避等 「不得比基准更早」的语义——对称抖动会把退避压短,退避叠加 jitter 反而 促成更密集的重试风暴。deviation=0 恒等返回。与 Around 一致,仅适用于 正数语义。
func (Unstable) UpwardDuration ¶ added in v0.11.0
UpwardDuration 返回 d ∈ [d, d(1+dev)] 的随机时长。deviation=0 恒等返回。
func (Unstable) UpwardFloat64 ¶ added in v0.11.0
UpwardFloat64 返回 v ∈ [v, v(1+dev)] 的随机浮点数。deviation=0 恒等返回。