\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 -5.087625860505018381828444417067874036646 \cdot 10^{-135}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 0.01064842317658122247681085070780682144687:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r70658 = b;
double r70659 = -r70658;
double r70660 = r70658 * r70658;
double r70661 = 4.0;
double r70662 = a;
double r70663 = c;
double r70664 = r70662 * r70663;
double r70665 = r70661 * r70664;
double r70666 = r70660 - r70665;
double r70667 = sqrt(r70666);
double r70668 = r70659 - r70667;
double r70669 = 2.0;
double r70670 = r70669 * r70662;
double r70671 = r70668 / r70670;
return r70671;
}
double f(double a, double b, double c) {
double r70672 = b;
double r70673 = -5.0876258605050184e-135;
bool r70674 = r70672 <= r70673;
double r70675 = -1.0;
double r70676 = c;
double r70677 = r70676 / r70672;
double r70678 = r70675 * r70677;
double r70679 = 0.010648423176581222;
bool r70680 = r70672 <= r70679;
double r70681 = -r70672;
double r70682 = 2.0;
double r70683 = a;
double r70684 = r70682 * r70683;
double r70685 = r70681 / r70684;
double r70686 = r70672 * r70672;
double r70687 = r70683 * r70676;
double r70688 = 4.0;
double r70689 = r70687 * r70688;
double r70690 = r70686 - r70689;
double r70691 = sqrt(r70690);
double r70692 = r70691 / r70684;
double r70693 = r70685 - r70692;
double r70694 = 1.0;
double r70695 = r70672 / r70683;
double r70696 = r70677 - r70695;
double r70697 = r70694 * r70696;
double r70698 = r70680 ? r70693 : r70697;
double r70699 = r70674 ? r70678 : r70698;
return r70699;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.6 |
|---|---|
| Target | 21.1 |
| Herbie | 11.3 |
if b < -5.0876258605050184e-135Initial program 50.7
Taylor expanded around -inf 11.7
if -5.0876258605050184e-135 < b < 0.010648423176581222Initial program 13.2
rmApplied div-sub13.2
Simplified13.2
rmApplied pow113.2
if 0.010648423176581222 < b Initial program 32.9
Taylor expanded around inf 8.1
Simplified8.1
Final simplification11.3
herbie shell --seed 2019305 +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)))