\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 -6.6114837319571935 \cdot 10^{38}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -3.49799969143154611 \cdot 10^{-295}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{elif}\;b \le 1.5018928133646766 \cdot 10^{85}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r84720 = b;
double r84721 = -r84720;
double r84722 = r84720 * r84720;
double r84723 = 4.0;
double r84724 = a;
double r84725 = c;
double r84726 = r84724 * r84725;
double r84727 = r84723 * r84726;
double r84728 = r84722 - r84727;
double r84729 = sqrt(r84728);
double r84730 = r84721 - r84729;
double r84731 = 2.0;
double r84732 = r84731 * r84724;
double r84733 = r84730 / r84732;
return r84733;
}
double f(double a, double b, double c) {
double r84734 = b;
double r84735 = -6.6114837319571935e+38;
bool r84736 = r84734 <= r84735;
double r84737 = -1.0;
double r84738 = c;
double r84739 = r84738 / r84734;
double r84740 = r84737 * r84739;
double r84741 = -3.497999691431546e-295;
bool r84742 = r84734 <= r84741;
double r84743 = 2.0;
double r84744 = r84743 * r84738;
double r84745 = -r84734;
double r84746 = r84734 * r84734;
double r84747 = 4.0;
double r84748 = a;
double r84749 = r84748 * r84738;
double r84750 = r84747 * r84749;
double r84751 = r84746 - r84750;
double r84752 = sqrt(r84751);
double r84753 = r84745 + r84752;
double r84754 = r84744 / r84753;
double r84755 = 1.5018928133646766e+85;
bool r84756 = r84734 <= r84755;
double r84757 = r84743 * r84748;
double r84758 = r84745 / r84757;
double r84759 = r84752 / r84757;
double r84760 = r84758 - r84759;
double r84761 = 1.0;
double r84762 = r84734 / r84748;
double r84763 = r84739 - r84762;
double r84764 = r84761 * r84763;
double r84765 = r84756 ? r84760 : r84764;
double r84766 = r84742 ? r84754 : r84765;
double r84767 = r84736 ? r84740 : r84766;
return r84767;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 21.2 |
| Herbie | 7.2 |
if b < -6.6114837319571935e+38Initial program 57.0
Taylor expanded around -inf 4.8
if -6.6114837319571935e+38 < b < -3.497999691431546e-295Initial program 29.3
rmApplied div-inv29.4
rmApplied flip--29.4
Applied associate-*l/29.4
Simplified17.6
Taylor expanded around 0 10.1
if -3.497999691431546e-295 < b < 1.5018928133646766e+85Initial program 9.4
rmApplied div-sub9.4
if 1.5018928133646766e+85 < b Initial program 43.7
Taylor expanded around inf 3.6
Simplified3.6
Final simplification7.2
herbie shell --seed 2020039
(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)))