internal API

Luna-Flow/luna-poly/internal 存放各实现包共用的辅助函数。MoonBit 规定 internal 包只能被同一模块内的包导入,因此本页记录的是各表示所依赖的契约;luna-poly 之外的代码无法调用它。

幂

pow_nat

从单位元 one 出发,用二进制快速幂计算自然数指数的 aea^e。

pub fn[A : Mul] pow_nat(A, UInt, one~ : A) -> A
  • 无论 a 是什么,pow_nat(a, 0, one=u) 都返回 u;库中每个 pow(0) 都由此返回一,包括对零也是如此。
  • 它执行 ⌊log⁡2e⌋\lfloor \log_2 e \rfloor 次平方,并且对 ee 的每个置位至多再做一次乘法,因此至多调用 2⌊log⁡2e⌋+12\lfloor \log_2 e \rfloor + 1 次 *。
  • 它只需要一个满足结合律、且以 one 为左单位元的 *;不需要交换律,因为它相乘的每个因子都是 a 的幂。

它用于多项式的幂(DensePolynomial::pow、TermPolynomial::pow、SparsePolynomial::pow),以及求值和代换过程中系数的幂 aiαia_i^{\alpha_i}。

// Inside luna-poly only:
let p = @internal.pow_nat(base, 5U, one=DensePolynomial::one())