\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 -8.301687926884188663878043402578250574713 \cdot 10^{98}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 3.849558639383284492876426675330012960339 \cdot 10^{-181}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{a}\\
\mathbf{elif}\;b \le 1.357284433132494781653830699845499522001 \cdot 10^{61}:\\
\;\;\;\;\frac{1}{\frac{a}{\frac{-4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} + b}}} \cdot \frac{1}{2}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r64647 = b;
double r64648 = -r64647;
double r64649 = r64647 * r64647;
double r64650 = 4.0;
double r64651 = a;
double r64652 = c;
double r64653 = r64651 * r64652;
double r64654 = r64650 * r64653;
double r64655 = r64649 - r64654;
double r64656 = sqrt(r64655);
double r64657 = r64648 + r64656;
double r64658 = 2.0;
double r64659 = r64658 * r64651;
double r64660 = r64657 / r64659;
return r64660;
}
double f(double a, double b, double c) {
double r64661 = b;
double r64662 = -8.301687926884189e+98;
bool r64663 = r64661 <= r64662;
double r64664 = 1.0;
double r64665 = c;
double r64666 = r64665 / r64661;
double r64667 = a;
double r64668 = r64661 / r64667;
double r64669 = r64666 - r64668;
double r64670 = r64664 * r64669;
double r64671 = 3.8495586393832845e-181;
bool r64672 = r64661 <= r64671;
double r64673 = 1.0;
double r64674 = 2.0;
double r64675 = r64673 / r64674;
double r64676 = r64661 * r64661;
double r64677 = 4.0;
double r64678 = r64667 * r64665;
double r64679 = r64677 * r64678;
double r64680 = r64676 - r64679;
double r64681 = sqrt(r64680);
double r64682 = r64681 - r64661;
double r64683 = r64682 / r64667;
double r64684 = r64675 * r64683;
double r64685 = 1.3572844331324948e+61;
bool r64686 = r64661 <= r64685;
double r64687 = -r64679;
double r64688 = r64681 + r64661;
double r64689 = r64687 / r64688;
double r64690 = r64667 / r64689;
double r64691 = r64673 / r64690;
double r64692 = r64691 * r64675;
double r64693 = -1.0;
double r64694 = r64693 * r64666;
double r64695 = r64686 ? r64692 : r64694;
double r64696 = r64672 ? r64684 : r64695;
double r64697 = r64663 ? r64670 : r64696;
return r64697;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 20.8 |
| Herbie | 8.8 |
if b < -8.301687926884189e+98Initial program 46.2
Simplified46.2
Taylor expanded around -inf 3.6
Simplified3.6
if -8.301687926884189e+98 < b < 3.8495586393832845e-181Initial program 10.9
Simplified10.9
rmApplied *-un-lft-identity10.9
Applied times-frac10.9
if 3.8495586393832845e-181 < b < 1.3572844331324948e+61Initial program 34.8
Simplified34.8
rmApplied *-un-lft-identity34.8
Applied times-frac34.8
rmApplied flip--34.9
Simplified15.7
rmApplied *-un-lft-identity15.7
Applied *-un-lft-identity15.7
Applied times-frac15.7
Applied associate-/l*15.7
Simplified15.7
if 1.3572844331324948e+61 < b Initial program 57.4
Simplified57.4
Taylor expanded around inf 4.0
Final simplification8.8
herbie shell --seed 2019304
(FPCore (a b c)
:name "quadp (p42, positive)"
:precision binary64
:herbie-target
(if (< b 0.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)))