\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.2375225949334019 \cdot 10^{57}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 8.67970785211126629 \cdot 10^{-40}:\\
\;\;\;\;\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 r88097 = b;
double r88098 = -r88097;
double r88099 = r88097 * r88097;
double r88100 = 4.0;
double r88101 = a;
double r88102 = r88100 * r88101;
double r88103 = c;
double r88104 = r88102 * r88103;
double r88105 = r88099 - r88104;
double r88106 = sqrt(r88105);
double r88107 = r88098 + r88106;
double r88108 = 2.0;
double r88109 = r88108 * r88101;
double r88110 = r88107 / r88109;
return r88110;
}
double f(double a, double b, double c) {
double r88111 = b;
double r88112 = -2.237522594933402e+57;
bool r88113 = r88111 <= r88112;
double r88114 = 1.0;
double r88115 = c;
double r88116 = r88115 / r88111;
double r88117 = a;
double r88118 = r88111 / r88117;
double r88119 = r88116 - r88118;
double r88120 = r88114 * r88119;
double r88121 = 8.679707852111266e-40;
bool r88122 = r88111 <= r88121;
double r88123 = -r88111;
double r88124 = r88111 * r88111;
double r88125 = 4.0;
double r88126 = r88125 * r88117;
double r88127 = r88126 * r88115;
double r88128 = r88124 - r88127;
double r88129 = sqrt(r88128);
double r88130 = r88123 + r88129;
double r88131 = 2.0;
double r88132 = r88131 * r88117;
double r88133 = r88130 / r88132;
double r88134 = -1.0;
double r88135 = r88134 * r88116;
double r88136 = r88122 ? r88133 : r88135;
double r88137 = r88113 ? r88120 : r88136;
return r88137;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 10.6 |
if b < -2.237522594933402e+57Initial program 38.1
Taylor expanded around -inf 5.5
Simplified5.5
if -2.237522594933402e+57 < b < 8.679707852111266e-40Initial program 15.3
if 8.679707852111266e-40 < b Initial program 55.1
Taylor expanded around inf 7.5
Final simplification10.6
herbie shell --seed 2020025
(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)))