Your free trial has ended.
Try the live demo or log in .
By: ValentinHirschi <valentin.hirschi@gmail.com>
Reflect a zero-external contour chart only where its pole is unresolved next to the corner de1fba6 reflects zero_external's chart to (p1, p4, p3, p2, s23, s12; m1, m0, m3, m2) wherever m2 is massless, m3 and p2 are not, the line passes nearer the corner (1, 0) than (0, 0) by more than 1/128 and neither reflected conic has a double contour direction. The reflection is meant for a pole next to that corner, whose offset from the corner's vertex -beta of the tfun chart binary64 resolves only to eps of the vertex; reflected, the corner is at the origin. The line's distance alone does not tell whether there is such a pole: in the triage's class R2 (v1 1804, 7832 and 16613 of the verifier's sweep, g1 10856) the line is 40 % to 99.9 % nearer (1, 0), no selected pole lies next to the vertex, and the reflected chart lost to its own cancellations (a far pole of the nearly vanishing b = p4^2 = -9e-13 in 1804, a line product in 7832, a K cancelling by 2e3 and 400 in 16613 and 10856): 4.1e-12 to 1.0e-11, 3.3e-13 to 7.2e-12, 7.9e-13 to 3.0e-12 and 8.1e-13 to 1.3e-12 on the binary64 routes, where 09b2c74 kept 3.2e-13 to 8.5e-13, 1.8e-14 to 4.5e-13, 2.8e-13 to 6.8e-13 and 3.1e-14 to 4.3e-14. The reflection now also needs a pole of a contour that one of the original chart's two tfun selects with an offset y + beta that the rounding resolves to less than a factor 16 of itself (max(|beta|, |y|) > 16 |y + beta|), or to less than 2^12 of itself with the pole's own rounding (|beta| + dy > 4096 |y + beta|, dy = (Kt |y|^2 + Lt |y| + Nt)/|2 K y + L| the sensitivity of the root of K y^2 + L y + N to the rounding of the products that form K, L and N): box_complex::tfun_vertex_suspicious and zero_external_suspicious, the same test in the hand-written kernel (box_contour/vertex.rs, a module of its own: added to box_contour itself it changed how the crate's codegen units split the kernel's hot functions and cost 3.5 % more instructions per D0 call on boxes that never reach it). The inspection form keeps the line test alone (SheetAtom::rounding_choice): the orientations are algebraically identical. The thresholds come from the 1,505 boxes where the line test holds (the verifier's v1, CT, MS, NR and g1 sets, the NinjaRS streams' sweep SW, the tests' rows in their 24 relabellings and the 312 D0 rows of the 22 benchmark streams), each evaluated in both orientations on the hand-written kernel and the binary64 expression: 739 keep the original orientation, and no box that the reflection improves by more than 10x above 1e-12 loses it. The nearest of those have a pole 20 times nearer the vertex than its size (SW 29392, 4.1e-12 unreflected, 3.7e-13 reflected) or a pole whose own rounding the offset magnifies 1e4 times (v1 17278, 1.8e-11 and 8.2e-14); the R2 boxes have factors 1 to 7 and pole sensitivities 12 to 2.7e3. Any factor from 8 to 32 with 4096, or 16 with 4096 to 8192, gives the same outcome on these boxes. Against cb5370d, on every binary64 route: v1 335 boxes change, 0 worse, the R2 rows 1804, 7832 and 16613 fixed (now 3.2e-13 to 8.2e-13, 1.9e-14 to 4.5e-13, 5.2e-14 to 1.8e-13); g1 238 change, 0 worse, 10856 at 1.7e-14 to 3.2e-14; CT 7, SW 144, MS 7 and NR 1 change, 0 worse; TM and the tests' rows do not change. Every other box is bitwise unchanged on every route (regenerated). DoubleFloat and Float 128/256 (v1, MS): 0 worse. Instructions per D0 call against 09b2c74: geomean -0.088 %, max +0.394 % (syn-n6-r7, three boxes of which reach the test; cb5370d +0.284 %). New test zero_external_reflects_only_a_chart_with_a_pole_at_its_corner: the four R2 boxes and v1 17278, 18471 and SW 29392 (which keep the reflection) in their own labelling against COLLIER 1.2.9 in quadruple precision, every binary64 route within 1e-13 to 2e-12 (per row) and DoubleFloat within 1e-14. At cb5370d it fails on the first four (13 route entries, 8.1e-13 to 1.0e-11). The generated code and the D0 asset are regenerated in the series' regeneration commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>