\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}:\\
\;\;\;\;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(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r81577 = b;
double r81578 = -r81577;
double r81579 = r81577 * r81577;
double r81580 = 4.0;
double r81581 = a;
double r81582 = c;
double r81583 = r81581 * r81582;
double r81584 = r81580 * r81583;
double r81585 = r81579 - r81584;
double r81586 = sqrt(r81585);
double r81587 = r81578 - r81586;
double r81588 = 2.0;
double r81589 = r81588 * r81581;
double r81590 = r81587 / r81589;
return r81590;
}
double f(double a, double b, double c) {
double r81591 = b;
double r81592 = -1.0674124610604968e-82;
bool r81593 = r81591 <= r81592;
double r81594 = -1.0;
double r81595 = c;
double r81596 = r81595 / r81591;
double r81597 = r81594 * r81596;
double r81598 = 5.968766258400916e+107;
bool r81599 = r81591 <= r81598;
double r81600 = 1.0;
double r81601 = -r81591;
double r81602 = r81591 * r81591;
double r81603 = 4.0;
double r81604 = a;
double r81605 = r81604 * r81595;
double r81606 = r81603 * r81605;
double r81607 = r81602 - r81606;
double r81608 = sqrt(r81607);
double r81609 = r81601 - r81608;
double r81610 = 2.0;
double r81611 = r81610 * r81604;
double r81612 = r81609 / r81611;
double r81613 = r81600 * r81612;
double r81614 = 1.0;
double r81615 = r81591 / r81604;
double r81616 = r81596 - r81615;
double r81617 = r81614 * r81616;
double r81618 = r81599 ? r81613 : r81617;
double r81619 = r81593 ? r81597 : r81618;
return r81619;
}




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 add-cube-cbrt13.9
Applied times-frac13.9
Simplified13.9
Simplified13.7
if 5.968766258400916e+107 < b Initial program 50.0
Taylor expanded around inf 3.8
Simplified3.8
Final simplification10.3
herbie shell --seed 2020062 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))