\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 -4.170773079316174 \cdot 10^{+99}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 3.0168583404714427 \cdot 10^{-66}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{a} - \frac{b}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r6109134 = b;
double r6109135 = -r6109134;
double r6109136 = r6109134 * r6109134;
double r6109137 = 4.0;
double r6109138 = a;
double r6109139 = r6109137 * r6109138;
double r6109140 = c;
double r6109141 = r6109139 * r6109140;
double r6109142 = r6109136 - r6109141;
double r6109143 = sqrt(r6109142);
double r6109144 = r6109135 + r6109143;
double r6109145 = 2.0;
double r6109146 = r6109145 * r6109138;
double r6109147 = r6109144 / r6109146;
return r6109147;
}
double f(double a, double b, double c) {
double r6109148 = b;
double r6109149 = -4.170773079316174e+99;
bool r6109150 = r6109148 <= r6109149;
double r6109151 = c;
double r6109152 = r6109151 / r6109148;
double r6109153 = a;
double r6109154 = r6109148 / r6109153;
double r6109155 = r6109152 - r6109154;
double r6109156 = 2.0;
double r6109157 = r6109155 * r6109156;
double r6109158 = r6109157 / r6109156;
double r6109159 = 3.0168583404714427e-66;
bool r6109160 = r6109148 <= r6109159;
double r6109161 = r6109148 * r6109148;
double r6109162 = 4.0;
double r6109163 = r6109153 * r6109151;
double r6109164 = r6109162 * r6109163;
double r6109165 = r6109161 - r6109164;
double r6109166 = sqrt(r6109165);
double r6109167 = r6109166 / r6109153;
double r6109168 = r6109167 - r6109154;
double r6109169 = r6109168 / r6109156;
double r6109170 = -2.0;
double r6109171 = r6109170 * r6109152;
double r6109172 = r6109171 / r6109156;
double r6109173 = r6109160 ? r6109169 : r6109172;
double r6109174 = r6109150 ? r6109158 : r6109173;
return r6109174;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.2 |
|---|---|
| Target | 20.2 |
| Herbie | 9.7 |
if b < -4.170773079316174e+99Initial program 44.2
Simplified44.2
Taylor expanded around -inf 3.3
Simplified3.3
if -4.170773079316174e+99 < b < 3.0168583404714427e-66Initial program 12.8
Simplified12.8
rmApplied div-sub12.8
if 3.0168583404714427e-66 < b Initial program 53.1
Simplified53.0
rmApplied div-inv53.0
Taylor expanded around inf 8.5
Final simplification9.7
herbie shell --seed 2019143
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 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)))