|
| 1 | +### [Unreleased] |
| 2 | + |
| 3 | +#### Fixed |
| 4 | + |
| 5 | +- **LaTeX parsing: interval notation with `\lbrack`/`\lparen`** — parsing |
| 6 | + `\lbrack5,7)` or `\left\lbrack5,7\right)` now correctly produces an |
| 7 | + `Interval` expression. Previously, when the open delimiter was a LaTeX |
| 8 | + command (e.g., `\lbrack`), the parser incorrectly required the close |
| 9 | + delimiter to also be a LaTeX command (e.g., `\rparen` instead of `)`), |
| 10 | + causing mismatched-delimiter intervals to fail. |
| 11 | + |
| 12 | +#### Added |
| 13 | + |
| 14 | +- **High-precision Mandelbrot/Julia compilation** — the GPU compilation targets |
| 15 | + (GLSL, WGSL) now support three precision tiers for fractal rendering, selected |
| 16 | + automatically based on viewport hints: |
| 17 | + - **Single float** (zoom < 10^6x): existing implementation, no overhead |
| 18 | + - **Emulated double** (zoom 10^6x–10^14x): double-single (float-float) |
| 19 | + arithmetic using Dekker/Knuth algorithms, ~48-bit mantissa from two 32-bit |
| 20 | + floats |
| 21 | + - **Perturbation theory** (zoom > 10^14x): reference orbit computed on CPU at |
| 22 | + arbitrary precision via `BigDecimal`, GPU iterates only the small delta from |
| 23 | + the reference, with glitch detection and single-float rebase fallback |
| 24 | +- **Viewport-aware compile API** — `compile()` accepts optional |
| 25 | + `hints: { viewport: { center, radius } }`. The compiler auto-selects the |
| 26 | + precision strategy and returns `staleWhen` thresholds for cheap staleness |
| 27 | + checking by the plot engine. |
| 28 | +- **`CompilationResult` extensions** — new optional fields: `staleWhen` (plain |
| 29 | + data staleness predicate), `uniforms` (scalar shader uniforms), `textures` |
| 30 | + (typed texture data with format/dimensions for GPU upload). |
| 31 | + |
1 | 32 | ### 0.55.3 _2026-03-05_ |
2 | 33 |
|
3 | 34 | #### Improved |
|
23 | 54 | integer-typed |
24 | 55 | - `Abs` is a no-op when the operand is provably non-negative |
25 | 56 | - `Power(x, 2)` only expands to `(x * x)` for simple operands (symbols, |
26 | | - literals) — function calls like `Power(Sin(x), 2)` use `pow`/`Math.pow` |
27 | | - to avoid duplicate evaluation |
| 57 | + literals) — function calls like `Power(Sin(x), 2)` use `pow`/`Math.pow` to |
| 58 | + avoid duplicate evaluation |
28 | 59 | - Integer `Mod` with non-negative dividend uses plain `%` instead of the |
29 | 60 | Euclidean double-mod formula |
30 | 61 | - GPU variable declarations infer `i32`/`int` type for integer-typed locals |
|
0 commit comments