\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 -7.3975762435547 \cdot 10^{+118}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 1.3115303715225787 \cdot 10^{-131}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - \left(a \cdot 4\right) \cdot c} - b}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r4319559 = b;
double r4319560 = -r4319559;
double r4319561 = r4319559 * r4319559;
double r4319562 = 4.0;
double r4319563 = a;
double r4319564 = r4319562 * r4319563;
double r4319565 = c;
double r4319566 = r4319564 * r4319565;
double r4319567 = r4319561 - r4319566;
double r4319568 = sqrt(r4319567);
double r4319569 = r4319560 + r4319568;
double r4319570 = 2.0;
double r4319571 = r4319570 * r4319563;
double r4319572 = r4319569 / r4319571;
return r4319572;
}
double f(double a, double b, double c) {
double r4319573 = b;
double r4319574 = -7.3975762435547e+118;
bool r4319575 = r4319573 <= r4319574;
double r4319576 = c;
double r4319577 = r4319576 / r4319573;
double r4319578 = a;
double r4319579 = r4319573 / r4319578;
double r4319580 = r4319577 - r4319579;
double r4319581 = 1.3115303715225787e-131;
bool r4319582 = r4319573 <= r4319581;
double r4319583 = r4319573 * r4319573;
double r4319584 = 4.0;
double r4319585 = r4319578 * r4319584;
double r4319586 = r4319585 * r4319576;
double r4319587 = r4319583 - r4319586;
double r4319588 = sqrt(r4319587);
double r4319589 = r4319588 - r4319573;
double r4319590 = 2.0;
double r4319591 = r4319589 / r4319590;
double r4319592 = r4319591 / r4319578;
double r4319593 = -r4319577;
double r4319594 = r4319582 ? r4319592 : r4319593;
double r4319595 = r4319575 ? r4319580 : r4319594;
return r4319595;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 32.7 |
|---|---|
| Target | 20.0 |
| Herbie | 10.0 |
if b < -7.3975762435547e+118Initial program 49.0
Simplified49.0
Taylor expanded around -inf 49.0
Simplified49.0
Taylor expanded around -inf 3.0
if -7.3975762435547e+118 < b < 1.3115303715225787e-131Initial program 10.7
Simplified10.7
Taylor expanded around -inf 10.7
Simplified10.7
if 1.3115303715225787e-131 < b Initial program 50.3
Simplified50.3
Taylor expanded around -inf 50.3
Simplified50.3
Taylor expanded around inf 11.7
Simplified11.7
Final simplification10.0
herbie shell --seed 2019134 +o rules:numerics
(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)))