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.
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.
| function | method | uses | verified output | asked by |
|---|---|---|---|---|
| sqrt(x) | Newton | + − * / | sqrt(2) = 1.414213562373095 | 026 |
| exp(x) | Taylor (Horner) | + − * / | exp(1) = 2.718281828459045 | 009 · 031 · 033 |
| sin(x), cos(x) | Taylor | + − * / | sin(1) = 0.8414709848078965 | 031 · 033 |
| ln(x) | 2·atanh((x−1)/(x+1)) | + − * / | ln(2) = 0.6931471805599453 | 031 · 033 |
| rng (LCG) | MINSTD | * % | lcg(1) = 16807, 282475249, … | 004 · 030 |
| rng (xorshift32) | Marsaglia | ^ << >> & | xs32(1) = 270369, 67634689 | 004 · 030 |
| gcd(a,b) | Euclid (remainder) | % | gcd(1071,462) = 21 | 027 |
| modexp(b,e,m) | square & multiply | * % | modexp(2,10,1000) = 24 | 032 |
| big(x) | arbitrary precision | + − * / % | 100! exact; 2⁶⁴−1 = 18446744073709551615 | 032 · 035 · 041 · 047 |
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
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:
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.
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:
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.