\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 -2.615257373542238721197930661559276546696 \cdot 10^{153}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.388070047225937856958905133202240499626 \cdot 10^{-143}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r123895 = b;
double r123896 = -r123895;
double r123897 = r123895 * r123895;
double r123898 = 4.0;
double r123899 = a;
double r123900 = r123898 * r123899;
double r123901 = c;
double r123902 = r123900 * r123901;
double r123903 = r123897 - r123902;
double r123904 = sqrt(r123903);
double r123905 = r123896 + r123904;
double r123906 = 2.0;
double r123907 = r123906 * r123899;
double r123908 = r123905 / r123907;
return r123908;
}
double f(double a, double b, double c) {
double r123909 = b;
double r123910 = -2.6152573735422387e+153;
bool r123911 = r123909 <= r123910;
double r123912 = 1.0;
double r123913 = c;
double r123914 = r123913 / r123909;
double r123915 = a;
double r123916 = r123909 / r123915;
double r123917 = r123914 - r123916;
double r123918 = r123912 * r123917;
double r123919 = 1.3880700472259379e-143;
bool r123920 = r123909 <= r123919;
double r123921 = -r123909;
double r123922 = r123909 * r123909;
double r123923 = 4.0;
double r123924 = r123923 * r123915;
double r123925 = r123924 * r123913;
double r123926 = r123922 - r123925;
double r123927 = sqrt(r123926);
double r123928 = r123921 + r123927;
double r123929 = 2.0;
double r123930 = r123929 * r123915;
double r123931 = r123928 / r123930;
double r123932 = -1.0;
double r123933 = r123932 * r123914;
double r123934 = r123920 ? r123931 : r123933;
double r123935 = r123911 ? r123918 : r123934;
return r123935;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 21.5 |
| Herbie | 11.0 |
if b < -2.6152573735422387e+153Initial program 63.8
Taylor expanded around -inf 2.1
Simplified2.1
if -2.6152573735422387e+153 < b < 1.3880700472259379e-143Initial program 11.5
if 1.3880700472259379e-143 < b Initial program 50.3
Taylor expanded around inf 12.6
Final simplification11.0
herbie shell --seed 2019351
(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)))