\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 -0.03099989563658142946445117615894560003653:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 5.992812285264992608677553115821113751089 \cdot 10^{-289}:\\
\;\;\;\;\frac{\frac{\frac{\left(c \cdot 4\right) \cdot a}{\sqrt{b \cdot b - \left(c \cdot 4\right) \cdot a} - b}}{2}}{a}\\
\mathbf{elif}\;b \le 63580190853209333432320:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\end{array}double f(double a, double b, double c) {
double r4757082 = b;
double r4757083 = -r4757082;
double r4757084 = r4757082 * r4757082;
double r4757085 = 4.0;
double r4757086 = a;
double r4757087 = c;
double r4757088 = r4757086 * r4757087;
double r4757089 = r4757085 * r4757088;
double r4757090 = r4757084 - r4757089;
double r4757091 = sqrt(r4757090);
double r4757092 = r4757083 - r4757091;
double r4757093 = 2.0;
double r4757094 = r4757093 * r4757086;
double r4757095 = r4757092 / r4757094;
return r4757095;
}
double f(double a, double b, double c) {
double r4757096 = b;
double r4757097 = -0.03099989563658143;
bool r4757098 = r4757096 <= r4757097;
double r4757099 = -1.0;
double r4757100 = c;
double r4757101 = r4757100 / r4757096;
double r4757102 = r4757099 * r4757101;
double r4757103 = 5.992812285264993e-289;
bool r4757104 = r4757096 <= r4757103;
double r4757105 = 4.0;
double r4757106 = r4757100 * r4757105;
double r4757107 = a;
double r4757108 = r4757106 * r4757107;
double r4757109 = r4757096 * r4757096;
double r4757110 = r4757109 - r4757108;
double r4757111 = sqrt(r4757110);
double r4757112 = r4757111 - r4757096;
double r4757113 = r4757108 / r4757112;
double r4757114 = 2.0;
double r4757115 = r4757113 / r4757114;
double r4757116 = r4757115 / r4757107;
double r4757117 = 6.358019085320933e+22;
bool r4757118 = r4757096 <= r4757117;
double r4757119 = -r4757096;
double r4757120 = r4757107 * r4757100;
double r4757121 = r4757105 * r4757120;
double r4757122 = r4757109 - r4757121;
double r4757123 = sqrt(r4757122);
double r4757124 = r4757119 - r4757123;
double r4757125 = r4757107 * r4757114;
double r4757126 = r4757124 / r4757125;
double r4757127 = r4757096 / r4757107;
double r4757128 = r4757101 - r4757127;
double r4757129 = 1.0;
double r4757130 = r4757128 * r4757129;
double r4757131 = r4757118 ? r4757126 : r4757130;
double r4757132 = r4757104 ? r4757116 : r4757131;
double r4757133 = r4757098 ? r4757102 : r4757132;
return r4757133;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 20.8 |
| Herbie | 9.3 |
if b < -0.03099989563658143Initial program 55.6
Taylor expanded around -inf 6.4
if -0.03099989563658143 < b < 5.992812285264993e-289Initial program 24.4
rmApplied flip--24.4
Simplified16.6
Simplified16.6
rmApplied associate-/r*16.6
Simplified16.7
if 5.992812285264993e-289 < b < 6.358019085320933e+22Initial program 10.0
if 6.358019085320933e+22 < b Initial program 33.1
Taylor expanded around inf 6.1
Simplified6.1
Final simplification9.3
herbie shell --seed 2019192
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))