\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 -9.155327002621879240971632151563348379742 \cdot 10^{117}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 3.622962172940872725615087320648120303101 \cdot 10^{-206}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{elif}\;b \le 5.179201385701060896596521886473852187744 \cdot 10^{98}:\\
\;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r63844 = b;
double r63845 = -r63844;
double r63846 = r63844 * r63844;
double r63847 = 4.0;
double r63848 = a;
double r63849 = c;
double r63850 = r63848 * r63849;
double r63851 = r63847 * r63850;
double r63852 = r63846 - r63851;
double r63853 = sqrt(r63852);
double r63854 = r63845 - r63853;
double r63855 = 2.0;
double r63856 = r63855 * r63848;
double r63857 = r63854 / r63856;
return r63857;
}
double f(double a, double b, double c) {
double r63858 = b;
double r63859 = -9.155327002621879e+117;
bool r63860 = r63858 <= r63859;
double r63861 = -1.0;
double r63862 = c;
double r63863 = r63862 / r63858;
double r63864 = r63861 * r63863;
double r63865 = 3.622962172940873e-206;
bool r63866 = r63858 <= r63865;
double r63867 = 2.0;
double r63868 = r63867 * r63862;
double r63869 = -r63858;
double r63870 = r63858 * r63858;
double r63871 = 4.0;
double r63872 = a;
double r63873 = r63872 * r63862;
double r63874 = r63871 * r63873;
double r63875 = r63870 - r63874;
double r63876 = sqrt(r63875);
double r63877 = r63869 + r63876;
double r63878 = r63868 / r63877;
double r63879 = 5.179201385701061e+98;
bool r63880 = r63858 <= r63879;
double r63881 = r63869 - r63876;
double r63882 = r63881 / r63867;
double r63883 = r63882 / r63872;
double r63884 = 1.0;
double r63885 = r63858 / r63872;
double r63886 = r63863 - r63885;
double r63887 = r63884 * r63886;
double r63888 = r63880 ? r63883 : r63887;
double r63889 = r63866 ? r63878 : r63888;
double r63890 = r63860 ? r63864 : r63889;
return r63890;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 20.4 |
| Herbie | 6.5 |
if b < -9.155327002621879e+117Initial program 60.8
Taylor expanded around -inf 1.8
if -9.155327002621879e+117 < b < 3.622962172940873e-206Initial program 30.1
rmApplied associate-/r*30.1
rmApplied *-un-lft-identity30.1
Applied div-inv30.1
Applied times-frac30.1
Simplified30.1
rmApplied flip--30.3
Applied associate-*l/30.3
Simplified14.7
Taylor expanded around 0 9.4
if 3.622962172940873e-206 < b < 5.179201385701061e+98Initial program 8.1
rmApplied associate-/r*8.1
if 5.179201385701061e+98 < b Initial program 44.9
Taylor expanded around inf 3.5
Simplified3.5
Final simplification6.5
herbie shell --seed 2019298
(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)))