\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 -3995085856351435358208:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le 1.369663197338588139608765037558519461426 \cdot 10^{-61}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \left(\sqrt{b \cdot b - a \cdot \left(c \cdot 4\right)} - b\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot -1}{b}\\
\end{array}double f(double a, double b, double c) {
double r103019 = b;
double r103020 = -r103019;
double r103021 = r103019 * r103019;
double r103022 = 4.0;
double r103023 = a;
double r103024 = r103022 * r103023;
double r103025 = c;
double r103026 = r103024 * r103025;
double r103027 = r103021 - r103026;
double r103028 = sqrt(r103027);
double r103029 = r103020 + r103028;
double r103030 = 2.0;
double r103031 = r103030 * r103023;
double r103032 = r103029 / r103031;
return r103032;
}
double f(double a, double b, double c) {
double r103033 = b;
double r103034 = -3.9950858563514354e+21;
bool r103035 = r103033 <= r103034;
double r103036 = c;
double r103037 = r103036 / r103033;
double r103038 = a;
double r103039 = r103033 / r103038;
double r103040 = r103037 - r103039;
double r103041 = 1.0;
double r103042 = r103040 * r103041;
double r103043 = 1.3696631973385881e-61;
bool r103044 = r103033 <= r103043;
double r103045 = 1.0;
double r103046 = r103045 / r103038;
double r103047 = r103033 * r103033;
double r103048 = 4.0;
double r103049 = r103036 * r103048;
double r103050 = r103038 * r103049;
double r103051 = r103047 - r103050;
double r103052 = sqrt(r103051);
double r103053 = r103052 - r103033;
double r103054 = r103046 * r103053;
double r103055 = 2.0;
double r103056 = r103054 / r103055;
double r103057 = -1.0;
double r103058 = r103036 * r103057;
double r103059 = r103058 / r103033;
double r103060 = r103044 ? r103056 : r103059;
double r103061 = r103035 ? r103042 : r103060;
return r103061;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.6 |
|---|---|
| Target | 21.0 |
| Herbie | 10.3 |
if b < -3.9950858563514354e+21Initial program 35.4
Simplified35.4
Taylor expanded around -inf 6.5
Simplified6.5
if -3.9950858563514354e+21 < b < 1.3696631973385881e-61Initial program 14.6
Simplified14.6
rmApplied *-un-lft-identity14.6
Applied *-un-lft-identity14.6
Applied times-frac14.6
Applied associate-/l*14.7
Simplified14.7
rmApplied associate-/r*14.7
Simplified14.8
if 1.3696631973385881e-61 < b Initial program 53.7
Simplified53.7
Taylor expanded around inf 8.2
Simplified8.2
Final simplification10.3
herbie shell --seed 2019194
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))