\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 \frac{c}{b}\\
\mathbf{elif}\;b \le 5.96876625840091586 \cdot 10^{107}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot \left(2 \cdot \frac{c}{b} - 2 \cdot \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r95627 = b;
double r95628 = -r95627;
double r95629 = r95627 * r95627;
double r95630 = 4.0;
double r95631 = a;
double r95632 = c;
double r95633 = r95631 * r95632;
double r95634 = r95630 * r95633;
double r95635 = r95629 - r95634;
double r95636 = sqrt(r95635);
double r95637 = r95628 - r95636;
double r95638 = 2.0;
double r95639 = r95638 * r95631;
double r95640 = r95637 / r95639;
return r95640;
}
double f(double a, double b, double c) {
double r95641 = b;
double r95642 = -1.0674124610604968e-82;
bool r95643 = r95641 <= r95642;
double r95644 = -1.0;
double r95645 = c;
double r95646 = r95645 / r95641;
double r95647 = r95644 * r95646;
double r95648 = 5.968766258400916e+107;
bool r95649 = r95641 <= r95648;
double r95650 = 1.0;
double r95651 = 2.0;
double r95652 = r95650 / r95651;
double r95653 = -r95641;
double r95654 = r95641 * r95641;
double r95655 = 4.0;
double r95656 = a;
double r95657 = r95656 * r95645;
double r95658 = r95655 * r95657;
double r95659 = r95654 - r95658;
double r95660 = sqrt(r95659);
double r95661 = r95653 - r95660;
double r95662 = r95661 / r95656;
double r95663 = r95652 * r95662;
double r95664 = r95651 * r95646;
double r95665 = 2.0;
double r95666 = r95641 / r95656;
double r95667 = r95665 * r95666;
double r95668 = r95664 - r95667;
double r95669 = r95652 * r95668;
double r95670 = r95649 ? r95663 : r95669;
double r95671 = r95643 ? r95647 : r95670;
return r95671;
}




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
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 times-frac13.8
Applied add-cube-cbrt13.8
Applied times-frac13.8
Simplified13.8
Simplified13.7
if 5.968766258400916e+107 < b Initial program 50.0
rmApplied clear-num50.0
rmApplied *-un-lft-identity50.0
Applied times-frac50.0
Applied add-cube-cbrt50.0
Applied times-frac50.0
Simplified50.0
Simplified50.0
Taylor expanded around inf 3.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)))