\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 -4.0323767944871679 \cdot 10^{127}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.17528679488360856 \cdot 10^{-69}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r110762 = b;
double r110763 = -r110762;
double r110764 = r110762 * r110762;
double r110765 = 4.0;
double r110766 = a;
double r110767 = c;
double r110768 = r110766 * r110767;
double r110769 = r110765 * r110768;
double r110770 = r110764 - r110769;
double r110771 = sqrt(r110770);
double r110772 = r110763 + r110771;
double r110773 = 2.0;
double r110774 = r110773 * r110766;
double r110775 = r110772 / r110774;
return r110775;
}
double f(double a, double b, double c) {
double r110776 = b;
double r110777 = -4.032376794487168e+127;
bool r110778 = r110776 <= r110777;
double r110779 = 1.0;
double r110780 = c;
double r110781 = r110780 / r110776;
double r110782 = a;
double r110783 = r110776 / r110782;
double r110784 = r110781 - r110783;
double r110785 = r110779 * r110784;
double r110786 = 1.1752867948836086e-69;
bool r110787 = r110776 <= r110786;
double r110788 = -r110776;
double r110789 = r110776 * r110776;
double r110790 = 4.0;
double r110791 = r110782 * r110780;
double r110792 = r110790 * r110791;
double r110793 = r110789 - r110792;
double r110794 = sqrt(r110793);
double r110795 = r110788 + r110794;
double r110796 = 2.0;
double r110797 = r110796 * r110782;
double r110798 = r110795 / r110797;
double r110799 = -1.0;
double r110800 = r110799 * r110781;
double r110801 = r110787 ? r110798 : r110800;
double r110802 = r110778 ? r110785 : r110801;
return r110802;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.5 |
|---|---|
| Target | 20.6 |
| Herbie | 10.0 |
if b < -4.032376794487168e+127Initial program 53.1
Taylor expanded around -inf 3.1
Simplified3.1
if -4.032376794487168e+127 < b < 1.1752867948836086e-69Initial program 12.7
if 1.1752867948836086e-69 < b Initial program 53.9
Taylor expanded around inf 8.8
Final simplification10.0
herbie shell --seed 2020035
(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)))