\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.869662346631121401645595393947635525169 \cdot 10^{101}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 7.455592343308264166675918758902222662503 \cdot 10^{-170}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)} - b}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r58828 = b;
double r58829 = -r58828;
double r58830 = r58828 * r58828;
double r58831 = 4.0;
double r58832 = a;
double r58833 = c;
double r58834 = r58832 * r58833;
double r58835 = r58831 * r58834;
double r58836 = r58830 - r58835;
double r58837 = sqrt(r58836);
double r58838 = r58829 - r58837;
double r58839 = 2.0;
double r58840 = r58839 * r58832;
double r58841 = r58838 / r58840;
return r58841;
}
double f(double a, double b, double c) {
double r58842 = b;
double r58843 = -1.8696623466311214e+101;
bool r58844 = r58842 <= r58843;
double r58845 = -1.0;
double r58846 = c;
double r58847 = r58846 / r58842;
double r58848 = r58845 * r58847;
double r58849 = 7.455592343308264e-170;
bool r58850 = r58842 <= r58849;
double r58851 = 2.0;
double r58852 = r58851 * r58846;
double r58853 = 4.0;
double r58854 = a;
double r58855 = r58854 * r58846;
double r58856 = r58853 * r58855;
double r58857 = -r58856;
double r58858 = fma(r58842, r58842, r58857);
double r58859 = sqrt(r58858);
double r58860 = r58859 - r58842;
double r58861 = r58852 / r58860;
double r58862 = 1.0;
double r58863 = r58842 / r58854;
double r58864 = r58847 - r58863;
double r58865 = r58862 * r58864;
double r58866 = r58850 ? r58861 : r58865;
double r58867 = r58844 ? r58848 : r58866;
return r58867;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.9 |
|---|---|
| Target | 21.1 |
| Herbie | 11.3 |
if b < -1.8696623466311214e+101Initial program 59.8
Taylor expanded around -inf 2.5
if -1.8696623466311214e+101 < b < 7.455592343308264e-170Initial program 28.9
rmApplied flip--29.1
Simplified16.7
Simplified16.7
rmApplied div-inv16.7
rmApplied associate-*l/16.2
Simplified16.1
Taylor expanded around 0 11.1
if 7.455592343308264e-170 < b Initial program 23.0
Taylor expanded around inf 17.1
Simplified17.1
Final simplification11.3
herbie shell --seed 2019323 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))