caad3c0f

By: ValentinHirschi <valentin.hirschi@gmail.com>

Keep the trif2 coefficient c exactly zero at a vanishing invariant

The two-mass triangle (trif2) forms c = (s4/s2 - r24)/(s3 s4). At p23 = 0
with unequal masses r24 is s4/s2 analytically, so c vanishes; computed as a
difference it was a few-bit residue in Float. The quadratic formula then
returned a noise second root and the root term divided by it, so the
NinjaRS syn-n6-r6 C0 calls (one complex mass, one massless line) came out
with 2-8 tracked bits and wrong leading digits from 248 bits up, at
2048 bits in the interpreted expressions too.

c now uses the registered helper rfun_ratio_gap, which returns -delta (the
exact zero-momentum root offset, zero at p = 0) when the r-function chose
the root s4/s2, and the plain difference otherwise.

Checked at 96..1024 bits in steps of 8 and at 2048 bits for all 165
syn-n6-r6 C0 calls, native Float and interpreted expressions: no deviation
from the 2048-bit reference, which agrees with OneLOop 3.6 in quadruple
precision to 1e-20. Binary64 values are unchanged in the sweeps.

tests/float_branch_decisions.rs checks both reported calls at 128-2048
bits on both routes (the old coefficient fails it from 256 bits up).
Native C0 code and the C0 SymJIT asset are regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GitHub
configure