\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 -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 - 4 \cdot \left(c \cdot a\right)} - b}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r3274607 = b;
double r3274608 = -r3274607;
double r3274609 = r3274607 * r3274607;
double r3274610 = 4.0;
double r3274611 = a;
double r3274612 = c;
double r3274613 = r3274611 * r3274612;
double r3274614 = r3274610 * r3274613;
double r3274615 = r3274609 - r3274614;
double r3274616 = sqrt(r3274615);
double r3274617 = r3274608 + r3274616;
double r3274618 = 2.0;
double r3274619 = r3274618 * r3274611;
double r3274620 = r3274617 / r3274619;
return r3274620;
}
double f(double a, double b, double c) {
double r3274621 = b;
double r3274622 = -7.3975762435547e+118;
bool r3274623 = r3274621 <= r3274622;
double r3274624 = c;
double r3274625 = r3274624 / r3274621;
double r3274626 = a;
double r3274627 = r3274621 / r3274626;
double r3274628 = r3274625 - r3274627;
double r3274629 = 1.3115303715225787e-131;
bool r3274630 = r3274621 <= r3274629;
double r3274631 = r3274621 * r3274621;
double r3274632 = 4.0;
double r3274633 = r3274624 * r3274626;
double r3274634 = r3274632 * r3274633;
double r3274635 = r3274631 - r3274634;
double r3274636 = sqrt(r3274635);
double r3274637 = r3274636 - r3274621;
double r3274638 = 2.0;
double r3274639 = r3274637 / r3274638;
double r3274640 = r3274639 / r3274626;
double r3274641 = -r3274625;
double r3274642 = r3274630 ? r3274640 : r3274641;
double r3274643 = r3274623 ? r3274628 : r3274642;
return r3274643;
}




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 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 "quadp (p42, positive)"
: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)))