\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 -1.0674124610604968 \cdot 10^{-82}:\\
\;\;\;\;1 \cdot \left(-1 \cdot \frac{c}{b}\right)\\
\mathbf{elif}\;b \le 5.96876625840091586 \cdot 10^{107}:\\
\;\;\;\;1 \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\right)\\
\end{array}double f(double a, double b, double c) {
double r95600 = b;
double r95601 = -r95600;
double r95602 = r95600 * r95600;
double r95603 = 4.0;
double r95604 = a;
double r95605 = c;
double r95606 = r95604 * r95605;
double r95607 = r95603 * r95606;
double r95608 = r95602 - r95607;
double r95609 = sqrt(r95608);
double r95610 = r95601 - r95609;
double r95611 = 2.0;
double r95612 = r95611 * r95604;
double r95613 = r95610 / r95612;
return r95613;
}
double f(double a, double b, double c) {
double r95614 = b;
double r95615 = -1.0674124610604968e-82;
bool r95616 = r95614 <= r95615;
double r95617 = 1.0;
double r95618 = -1.0;
double r95619 = c;
double r95620 = r95619 / r95614;
double r95621 = r95618 * r95620;
double r95622 = r95617 * r95621;
double r95623 = 5.968766258400916e+107;
bool r95624 = r95614 <= r95623;
double r95625 = -r95614;
double r95626 = r95614 * r95614;
double r95627 = 4.0;
double r95628 = a;
double r95629 = r95628 * r95619;
double r95630 = r95627 * r95629;
double r95631 = r95626 - r95630;
double r95632 = sqrt(r95631);
double r95633 = r95625 - r95632;
double r95634 = 2.0;
double r95635 = r95634 * r95628;
double r95636 = r95633 / r95635;
double r95637 = r95617 * r95636;
double r95638 = 1.0;
double r95639 = r95614 / r95628;
double r95640 = r95620 - r95639;
double r95641 = r95638 * r95640;
double r95642 = r95617 * r95641;
double r95643 = r95624 ? r95637 : r95642;
double r95644 = r95616 ? r95622 : r95643;
return r95644;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.4 |
|---|---|
| Target | 21.5 |
| Herbie | 10.3 |
if b < -1.0674124610604968e-82Initial program 52.3
rmApplied clear-num52.4
rmApplied *-un-lft-identity52.4
Applied add-cube-cbrt52.4
Applied times-frac52.4
Simplified52.4
Simplified52.3
Taylor expanded around -inf 8.9
if -1.0674124610604968e-82 < b < 5.968766258400916e+107Initial program 13.7
rmApplied clear-num13.9
rmApplied *-un-lft-identity13.9
Applied add-cube-cbrt13.9
Applied times-frac13.9
Simplified13.9
Simplified13.7
if 5.968766258400916e+107 < b Initial program 50.0
rmApplied clear-num50.0
rmApplied *-un-lft-identity50.0
Applied add-cube-cbrt50.0
Applied times-frac50.0
Simplified50.0
Simplified50.0
Taylor expanded around inf 3.8
Simplified3.8
Final simplification10.3
herbie shell --seed 2020062 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))