internal API
Luna-Flow/luna-poly/internal は実装パッケージ間で共有されるヘルパーを保持します。MoonBit は internal パッケージをインポートできるのを同じモジュール内のパッケージに限定しているため、このページは各表現が依存する契約を記述するものです。luna-poly の外のコードからは呼び出せません。
べき
pow_nat
単位元 one から始めて、二分累乗法で自然数の指数に対する を計算します。
pub fn[A : Mul] pow_nat(A, UInt, one~ : A) -> A
pow_nat(a, 0, one=u)はaが何であってもuを返します。ライブラリ内のすべてのpow(0)が、零に対しても 1 を返すのはこのためです。- 回の二乗と、 の立っているビットごとに高々 1 回の追加乗算を行うため、
*の呼び出しは高々 回です。 - 必要なのは、
oneが左単位元となる結合的な*だけです。掛け合わせる因子はすべてaのべきなので、可換性は不要です。
多項式のべき (DensePolynomial::pow、TermPolynomial::pow、SparsePolynomial::pow) と、評価や代入における係数のべき に使われます。
// Inside luna-poly only:
let p = @internal.pow_nat(base, 5U, one=DensePolynomial::one())