\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 r58846 = b;
double r58847 = -r58846;
double r58848 = r58846 * r58846;
double r58849 = 4.0;
double r58850 = a;
double r58851 = r58849 * r58850;
double r58852 = c;
double r58853 = r58851 * r58852;
double r58854 = r58848 - r58853;
double r58855 = sqrt(r58854);
double r58856 = r58847 + r58855;
double r58857 = 2.0;
double r58858 = r58857 * r58850;
double r58859 = r58856 / r58858;
return r58859;
}
double f(double a, double b, double c) {
double r58860 = b;
double r58861 = -3.974595954042362e+78;
bool r58862 = r58860 <= r58861;
double r58863 = 1.0;
double r58864 = c;
double r58865 = r58864 / r58860;
double r58866 = a;
double r58867 = r58860 / r58866;
double r58868 = r58865 - r58867;
double r58869 = r58863 * r58868;
double r58870 = -3.106669992168921e-249;
bool r58871 = r58860 <= r58870;
double r58872 = -r58860;
double r58873 = r58860 * r58860;
double r58874 = 4.0;
double r58875 = r58874 * r58866;
double r58876 = r58875 * r58864;
double r58877 = r58873 - r58876;
double r58878 = sqrt(r58877);
double r58879 = r58872 + r58878;
double r58880 = 1.0;
double r58881 = 2.0;
double r58882 = r58881 * r58866;
double r58883 = r58880 / r58882;
double r58884 = r58879 * r58883;
double r58885 = 3.3294485045805704e-14;
bool r58886 = r58860 <= r58885;
double r58887 = r58880 / r58866;
double r58888 = r58872 - r58878;
double r58889 = r58888 / r58864;
double r58890 = r58887 * r58889;
double r58891 = r58874 / r58890;
double r58892 = r58880 * r58891;
double r58893 = r58892 / r58882;
double r58894 = -1.0;
double r58895 = r58894 * r58865;
double r58896 = r58886 ? r58893 : r58895;
double r58897 = r58871 ? r58884 : r58896;
double r58898 = r58862 ? r58869 : r58897;
return r58898;
}



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 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, full range"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))