\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -3.974595954042361881691403492534140168485 \cdot 10^{78}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.1066699921689209753658832131181641309 \cdot 10^{-249}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.329448504580570356283886843099725433358 \cdot 10^{-14}:\\
\;\;\;\;\frac{1 \cdot \frac{4}{\frac{1}{a} \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{c}}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r59660 = b;
double r59661 = -r59660;
double r59662 = r59660 * r59660;
double r59663 = 4.0;
double r59664 = a;
double r59665 = r59663 * r59664;
double r59666 = c;
double r59667 = r59665 * r59666;
double r59668 = r59662 - r59667;
double r59669 = sqrt(r59668);
double r59670 = r59661 + r59669;
double r59671 = 2.0;
double r59672 = r59671 * r59664;
double r59673 = r59670 / r59672;
return r59673;
}
double f(double a, double b, double c) {
double r59674 = b;
double r59675 = -3.974595954042362e+78;
bool r59676 = r59674 <= r59675;
double r59677 = 1.0;
double r59678 = c;
double r59679 = r59678 / r59674;
double r59680 = a;
double r59681 = r59674 / r59680;
double r59682 = r59679 - r59681;
double r59683 = r59677 * r59682;
double r59684 = -3.106669992168921e-249;
bool r59685 = r59674 <= r59684;
double r59686 = -r59674;
double r59687 = r59674 * r59674;
double r59688 = 4.0;
double r59689 = r59688 * r59680;
double r59690 = r59689 * r59678;
double r59691 = r59687 - r59690;
double r59692 = sqrt(r59691);
double r59693 = r59686 + r59692;
double r59694 = 1.0;
double r59695 = 2.0;
double r59696 = r59695 * r59680;
double r59697 = r59694 / r59696;
double r59698 = r59693 * r59697;
double r59699 = 3.3294485045805704e-14;
bool r59700 = r59674 <= r59699;
double r59701 = r59694 / r59680;
double r59702 = r59686 - r59692;
double r59703 = r59702 / r59678;
double r59704 = r59701 * r59703;
double r59705 = r59688 / r59704;
double r59706 = r59694 * r59705;
double r59707 = r59706 / r59696;
double r59708 = -1.0;
double r59709 = r59708 * r59679;
double r59710 = r59700 ? r59707 : r59709;
double r59711 = r59685 ? r59698 : r59710;
double r59712 = r59676 ? r59683 : r59711;
return r59712;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -3.974595954042362e+78Initial program 41.5
Taylor expanded around -inf 4.2
Simplified4.2
if -3.974595954042362e+78 < b < -3.106669992168921e-249Initial program 8.2
rmApplied div-inv8.3
if -3.106669992168921e-249 < b < 3.3294485045805704e-14Initial program 23.6
rmApplied flip-+23.7
Simplified17.5
rmApplied *-un-lft-identity17.5
Applied *-un-lft-identity17.5
Applied times-frac17.5
Simplified17.5
Simplified17.5
rmApplied *-un-lft-identity17.5
Applied times-frac14.8
if 3.3294485045805704e-14 < b Initial program 55.3
Taylor expanded around inf 5.9
Final simplification8.2
herbie shell --seed 2019352
(FPCore (a b c)
:name "Quadratic roots, full range"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))