\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 -1.569310777886352095486911207889814773134 \cdot 10^{111}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 5.202443222624254327680309207854310362882 \cdot 10^{-45}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r100776 = b;
double r100777 = -r100776;
double r100778 = r100776 * r100776;
double r100779 = 4.0;
double r100780 = a;
double r100781 = r100779 * r100780;
double r100782 = c;
double r100783 = r100781 * r100782;
double r100784 = r100778 - r100783;
double r100785 = sqrt(r100784);
double r100786 = r100777 + r100785;
double r100787 = 2.0;
double r100788 = r100787 * r100780;
double r100789 = r100786 / r100788;
return r100789;
}
double f(double a, double b, double c) {
double r100790 = b;
double r100791 = -1.569310777886352e+111;
bool r100792 = r100790 <= r100791;
double r100793 = 1.0;
double r100794 = c;
double r100795 = r100794 / r100790;
double r100796 = a;
double r100797 = r100790 / r100796;
double r100798 = r100795 - r100797;
double r100799 = r100793 * r100798;
double r100800 = 5.2024432226242543e-45;
bool r100801 = r100790 <= r100800;
double r100802 = 1.0;
double r100803 = 2.0;
double r100804 = r100803 * r100796;
double r100805 = r100790 * r100790;
double r100806 = 4.0;
double r100807 = r100806 * r100796;
double r100808 = r100807 * r100794;
double r100809 = r100805 - r100808;
double r100810 = sqrt(r100809);
double r100811 = r100810 - r100790;
double r100812 = r100804 / r100811;
double r100813 = r100802 / r100812;
double r100814 = -1.0;
double r100815 = r100814 * r100795;
double r100816 = r100801 ? r100813 : r100815;
double r100817 = r100792 ? r100799 : r100816;
return r100817;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.1 |
| Herbie | 10.2 |
if b < -1.569310777886352e+111Initial program 50.4
Simplified50.4
Taylor expanded around -inf 3.9
Simplified3.9
if -1.569310777886352e+111 < b < 5.2024432226242543e-45Initial program 14.0
Simplified14.0
rmApplied clear-num14.1
if 5.2024432226242543e-45 < b Initial program 54.5
Simplified54.5
Taylor expanded around inf 7.4
Final simplification10.2
herbie shell --seed 2019303
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))