[docs]@jit(nopython=True,cache=const.use_numba_cache)defsolve(a:float,b:float,c:float)->NDArray[np.complex128]:_a=complex(a)_b=complex(b)_c=complex(c)roots=np.full(2,np.nan,dtype=np.complex128)ifabs(_a)!=0:# Quadratic cased=_b*_b-4*_a*_csqrt_d=cmath.sqrt(d)# Sign trick to reduce catastrophic cancellationsign_b=1.0if_b.real>=0else-1.0r1_num=-_b-sign_b*sqrt_dr1_den=2*_a# Fallback if numerator is tinyifabs(r1_num)<1e-14*abs(r1_den):r1_num=-_b+sign_b*sqrt_dr1=r1_num/r1_den# Use product identity for x2ifabs(r1)<1e-14:r2=(-_b+sqrt_d)/(2*_a)else:r2=(_c/_a)/r1roots[0]=r1roots[1]=r2returnrootsifabs(_b)!=0:# Linear caser1=-_c/_broots[0]=r1returnroots# Equation is just c=0. Either zero or infinite solutions. Returns nansreturnroots