◄ WORLD V · SONNY 5● THE LOOP CLOSES

THE STANDARD LIBRARY the darts came home

Every dart in this world ends with a recommendation for I-13. That was never decoration — it is a spec. This page is where the recommendations that were additions on top of the 13 counted symbols (not changes to them) actually land in the language. The core stays fixed; the reach grows around it. Written in I-13, run on the real compiler.

a dart hits a wall it names a recommend the recommend is integrated the next dart clears the wall

THE LIBRARY written in I-13 · verified on the compiler

None of these touched the interpreter. Each is an ordinary I-13 program — bounded recursion over the four arithmetic operators (and, for the PRNGs, % and the new bitwise ops). Run any of them: i13 run std/exp.i13.

functionmethodusesverified outputasked by
sqrt(x)Newton+ − * /sqrt(2) = 1.414213562373095026
exp(x)Taylor (Horner)+ − * /exp(1) = 2.718281828459045009 · 031 · 033
sin(x), cos(x)Taylor+ − * /sin(1) = 0.8414709848078965031 · 033
ln(x)2·atanh((x−1)/(x+1))+ − * /ln(2) = 0.6931471805599453031 · 033
rng (LCG)MINSTD* %lcg(1) = 16807, 282475249, …004 · 030
rng (xorshift32)Marsaglia^ << >> &xs32(1) = 270369, 67634689004 · 030
gcd(a,b)Euclid (remainder)%gcd(1071,462) = 21027
modexp(b,e,m)square & multiply* %modexp(2,10,1000) = 24032
big(x)arbitrary precision+ − * / %100! exact; 2⁶⁴−1 = 18446744073709551615032 · 035 · 041 · 047

WHY A BOUND IS A CHOICE watch a Taylor series converge

I-13 has no loop — iteration is bounded recursion, so every stdlib series runs a fixed number of terms. That is not a weakness; it is the same discipline as the rest of the language: total, analyzable, no unbounded work hidden anywhere. Slide the term count and watch the value walk onto the true answer, then stop earning digits. live

6

THE ONE INTERPRETER CHANGE bitwise — the % pattern again

Two functions above (and two darts — 001 fast inverse square root, 029 Nim) needed something the four operators cannot give cleanly: bitwise. So & | ^ << >> were added to the compiler as new BinOp discriminants — the exact shape as the earlier %, spending zero new alphabet symbols. Operands are read as 64-bit integers (exact within ±2⁵³). It runs:

$ i13 run bitwise.i13 nimsum = 0 # 3 ^ 5 ^ 6 -- Nim's nim-sum (dart 029), now native shifted = 512 # 1024 >> 1 shl = 256 # 1 << 8 $ i13 run std/rng_xorshift.i13 r1 = 270369 # xorshift32 -- impossible before bitwise

The full existing test suite still passes — 130 tests, 0 failed. The counted core did not move; five operators joined the two levels of precedence already there.

THE AUTHOR’S CALLS two crossed, one held

Some recommendations are not additions on top of the 13 symbols — they change what an I-13 value is, so they are the author’s call to make on the record, not a library function to slip in. Three reached that line; two are now built:

a bounded array — DECIDED & ADDED (2026-08-17). The “aggregate wall” (darts 017/018/021/028) — made yes: a bounded, checked, value-semantics array (ISA 15→18; spec/ARRAY.md). The Sieve of Eratosthenes runs in real I-13. The first non-scalar I-13 value.
arbitrary-precision integers — DECIDED & ADDED (2026-08-17). Darts 032, 035, 041, 047 all land here: exact arithmetic past f64’s 2⁵³ ceiling — made yes: a self-contained BigInt via the big() intrinsic (ISA 18→19; spec/BIGNUM.md). 100! and 2⁶⁴−1 are now exact in real I-13. The second value-model expansion.
multiple return — a way to hand back a pair / tuple. Darts 045 (quicksort) and 048 (union-find) both land here: quicksort’s partition and union-find’s path compression each want a function to return two values at once (array and index), and an I-13 function returns one. Still withheld — the last named frontier.

Recorded, not smuggled — and when the author decides yes, it is built and proven (130 tests still green). A minimal language grows most honestly by refusing, and accepting, on the record.