4d76030839
Sposta arrotonda1 (round-half-to-even come Python) da test-fisici.ts a curve.ts, esportata, cosi' entrambi i moduli condividono la stessa funzione invece di due copie che sui pareggi potrebbero divergere. Nel farlo, la versione precedente (moltiplica per 10, tolleranza 1e-9 sul pareggio) si e' rivelata sbagliata su un caso reale: 86.35 non e' un pareggio nel double che lo rappresenta (vale 86.34999999999999431..., Python arrotonda a 86.3 senza ambiguita'), ma 86.35*10 arrotonda ESATTAMENTE a 863.5 in virgola mobile, un pareggio fasullo creato dalla moltiplicazione. La versione naive dava 86.4. Sostituita con un confronto esatto: scompone il double in mantissa/esponente (bit IEEE 754) e confronta con aritmetica razionale su BigInt, senza mai passare per una moltiplicazione che possa introdurre o cancellare un pareggio. Aggiunti in motore-curve.test.ts i casi che dimostrano il pareggio vero (86.25 -> 86.2, 86.75 -> 86.8) e quello fasullo (86.35 -> 86.3, non 86.4: blocca la regressione appena descritta).