ludic/docs/language/math/math-pow.md
Orkuncakilkaya 6e6467b515
Some checks are pending
docs / build-and-deploy (push) Waiting to run
feat(stdlib): Math.exp/log/pow + Ease.elastic transcendentals (issue #25)
Finish the unblocked "Math / Ease" half of #25: the fixed-point
transcendentals deferred from #2. Vec.* stays blocked on the vec2 type
in #1.

- Math.exp, Math.log (natural), Math.pow — deterministic Q16.16 via two
  new prelude fns in emit_math_prelude: @fn_fx_exp2 (range-reduced 5th-order
  Taylor 2^f, then a clamped shift by the integer part) and @fn_fx_log2
  (llvm.ctlz for the exponent + an atanh series on (m-1)/(m+1) for the
  mantissa). exp=2^(x·log2 e), log=log2(x)·ln2, pow=2^(b·log2 a).
- Ease.elastic — ease-out elastic 2^(-10t)·sin((10t-0.75)·2pi/3)+1.
- Pure integer IR, so bit-identical on every platform. Results must fit the
  Q16.16 range (|x| < 32768); larger magnitudes saturate (documented).

Test selfhost/tests/transcend.ludic (registered in the self-host suite) +
docs for all four. Reseeded; the C-free bootstrap fixpoint holds. All suites
green (24 self-host, 45 regression, 29 tool).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-30 01:19:44 +03:00

943 B

id name category kind tokens sig tip order ns member
math-pow Math.pow math namespace-method Math.pow Math.pow(base, exp) -> fixed base raised to a fixed exponent. 31 Math pow

Returns baseexp for base > 0 and any fixed exp, computed in Q16.16 as 2exp·log₂base — so non-integer exponents work (Math.pow(x, 0.5) is a square root, though Math.sqrt is cheaper and exact) and it stays bit-identical on every platform. Use it for gameplay curves that need a tunable exponent: damage falloff, easing shaped by a designer-set power, or compound-growth economies. Keep the result inside the fixed range (magnitudes below 32768); combinations that exceed it saturate.

program Demo {
  handler Step phase Update {
    let falloff = Math.pow(0.9, distance)   # each unit keeps 90% of the effect
  }
}