feat(types): BigInt + Decimal exact economy numbers (#52)
Types phase 2 — the "money problem". A splice-on-demand bignum engine (runtime/native/bignum.ludic, self-contained, only intrinsics) exposed as two namespaces: - BigInt.* — arbitrary-precision integer (sign-magnitude, base-1e9 limbs): from/parse, add/sub/mul/pow, div/mod (by int), cmp/eq/is_zero, to_int, str. For idle counters and exact huge currencies that overflow a 32/64-bit int. - Decimal.* — exact base-10 fixed point (BigInt mantissa + decimal scale): from/parse, exact add/sub/mul, cmp/eq, scale/rescale (truncate), str. So 0.10 + 0.20 is exactly 0.30 — no binary rounding. Both exact => deterministic; no f32/f64. Wired: parser splice trigger (g_uses_bignum), emit_call dispatch, reseeded seed, a self-asserting example (examples/library/bignum.ludic + feat_case), and per-symbol docs + inventory. All suites green incl. golden renders byte-identical and the bootstrap fixpoint. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
2c9f9ac549
commit
bd6b12d2ea
35 changed files with 23274 additions and 20791 deletions
13
changes/types-bignum-decimal.md
Normal file
13
changes/types-bignum-decimal.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
bump: minor
|
||||
type: feat
|
||||
**Exact numbers for game economies — `BigInt` + `Decimal` (#52, types phase 2).**
|
||||
The thing a tycoon or idle game must never round wrong. `BigInt.*` is an
|
||||
arbitrary-precision integer (sign-magnitude, base-1e9 limbs) with `from`/`parse`,
|
||||
`add`/`sub`/`mul`/`pow`, integer `div`/`mod`, `cmp`/`eq`/`is_zero`, `to_int` and
|
||||
`str` — for idle counters and exact huge currencies that overflow a 32/64-bit
|
||||
int. `Decimal.*` is an exact base-10 fixed-point number (a `BigInt` mantissa
|
||||
plus a decimal scale) with `from`/`parse`, exact `add`/`sub`/`mul`, `cmp`/`eq`,
|
||||
`scale`/`rescale` and `str` — so money like `0.10 + 0.20` is exactly `0.30`, no
|
||||
binary rounding. Both are exact and therefore deterministic; no `f32`/`f64`. The
|
||||
engine (runtime/native/bignum.ludic) is spliced in on demand, so it costs
|
||||
nothing when unused and works in plain tools as well as games.
|
||||
Loading…
Add table
Add a link
Reference in a new issue