Commit fbb19a6
committed
feat(oracle): 200-bit mpmath floor oracle + v1.0.1 release notes
Add an independent 200-bit mpmath oracle that measures voltic,
py_lets_be_rational, and volfi as distance-from-the-f64-inversion-floor
on the canonical SplitMix64-seeded dataset. Reframes the v1.0.0 accuracy
claim ("matches LBR to 1e-15") into "at the f64 floor, independently
verified against 200-bit mpmath."
Methodology. For each option in the dataset:
1. Promote (S, K, T, r, sigma_true) to mpf at 200 bits.
2. Compute the 200-bit BS price.
3. sigma_truth_mpmath := invert the 200-bit price (sanity check on
the oracle itself; must agree with sigma_true
to << 1e-40).
4. sigma_truth_floor := invert the f64 price the dataset carries
(the one the f64 solvers see). This is the
inversion's physical floor — no f64 solver
can do better.
5. f64_floor := |sigma_truth_floor - sigma_true|.
6. <solver>_err := |sigma_<solver> - sigma_truth_floor|.
Oracle self-consistency on the 100k subsample: 7.5e-56. Passes the
1e-40 acceptance threshold by 16 orders of magnitude.
Per-band results (oracle bucketing by N(-d2); deep_otm/deep_itm both
correspond to the deep wings of the moneyness-vega plane):
band n voltic max LBR max volfi max volfi cat (>=1e-3)
deep_otm 12730 2.2e-11 2.0e-11 3.2e-1 439 / 12726 (3.45%)
near_atm 506 5.9e-15 2.3e-15 1.3e-11 0 / 506 (0%)
deep_itm 12969 4.3e-15 1.7e-15 3.3e-1 474 / 12969 (3.65%)
other 73795 1.9e-13 1.2e-13 1.4e-5 0 / 73795 (0%)
-----------------------------------------------------------------------
all 100000 2.2e-11 2.0e-11 3.3e-1 913 / 99996 (0.91%)
voltic and LBR sit at the floor across all bands. volfi has a silent
~0.91% catastrophic-precision tail in the deep wings (3-4% rate per
deep-wing band, max sigma error 3.3e-1). Independently confirmed by
Verifier B via hand-coded direct repro, put-call parity cross-check via
two paths, alternate volfi entry point, and volfi's own bs_call formula.
voltic vs LBR: mild 2-4x median ratio in the deep_otm tail (max
absolute 9.9e-12 - sub-picovol). Jaeckel's rational guess wins by
design in that corner; tightening voltic's deep_otm seed is v1.1 work.
Documented as a known gap.
Speed (single-threaded, znver5, taskset -c 0, same dataset; the Python
rows are a 100k subsample so total wall stays under a few seconds):
voltic 1.0.1 implied_vol_fast Rust f64x8 SIMD 73.6 ns 3.4e-11 0 NaN
py_lets_be_rational (scalar) Python+C++ 3475 ns 1.5e-11 0 NaN
py_vollib_vectorized Python+C++ (np) 406 ns 2.0e-11 0 NaN
volfi 0.1.8 iv_call C++ binding 350 ns 3.3e-1 1 NaN
voltic is ~48x faster than LBR scalar and ~5x faster than the
vectorized Python paths, at the same f64 accuracy floor.
Files:
- bench/python/oracle_mpmath.py: +200-bit mpmath oracle (~370 LOC)
- bench/python/requirements.txt: +mpmath==1.4.1
- .gitignore: +bench/python/*.csv, *.log
- README.md: rewritten around LBR-floor framing,
volfi tail finding, fair speed table
(drops the v1.0.0 strawman comparing
voltic split-context vs volfi
one-shot). Single line "For
consulting: ryan@databa.ai".
- CHANGELOG.md: +v1.0.1 entry
- Cargo.toml: version 1.0.0 -> 1.0.11 parent d620851 commit fbb19a6
6 files changed
Lines changed: 588 additions & 134 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
4 | 6 | | |
5 | 7 | | |
6 | 8 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
7 | 87 | | |
8 | 88 | | |
9 | 89 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
0 commit comments