\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.547666603636537260513437138645901028344 \cdot 10^{50}:\\
\;\;\;\;\left(\frac{\frac{c}{\sqrt[3]{b}}}{\sqrt[3]{b} \cdot \sqrt[3]{b}} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le 7.455592343308264166675918758902222662503 \cdot 10^{-170}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r50730 = b;
double r50731 = -r50730;
double r50732 = r50730 * r50730;
double r50733 = 4.0;
double r50734 = a;
double r50735 = r50733 * r50734;
double r50736 = c;
double r50737 = r50735 * r50736;
double r50738 = r50732 - r50737;
double r50739 = sqrt(r50738);
double r50740 = r50731 + r50739;
double r50741 = 2.0;
double r50742 = r50741 * r50734;
double r50743 = r50740 / r50742;
return r50743;
}
double f(double a, double b, double c) {
double r50744 = b;
double r50745 = -1.5476666036365373e+50;
bool r50746 = r50744 <= r50745;
double r50747 = c;
double r50748 = cbrt(r50744);
double r50749 = r50747 / r50748;
double r50750 = r50748 * r50748;
double r50751 = r50749 / r50750;
double r50752 = a;
double r50753 = r50744 / r50752;
double r50754 = r50751 - r50753;
double r50755 = 1.0;
double r50756 = r50754 * r50755;
double r50757 = 7.455592343308264e-170;
bool r50758 = r50744 <= r50757;
double r50759 = 1.0;
double r50760 = 2.0;
double r50761 = r50760 * r50752;
double r50762 = r50744 * r50744;
double r50763 = 4.0;
double r50764 = r50763 * r50752;
double r50765 = r50764 * r50747;
double r50766 = r50762 - r50765;
double r50767 = sqrt(r50766);
double r50768 = r50767 - r50744;
double r50769 = r50761 / r50768;
double r50770 = r50759 / r50769;
double r50771 = -1.0;
double r50772 = r50747 / r50744;
double r50773 = r50771 * r50772;
double r50774 = r50758 ? r50770 : r50773;
double r50775 = r50746 ? r50756 : r50774;
return r50775;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 20.8 |
| Herbie | 11.9 |
if b < -1.5476666036365373e+50Initial program 37.8
Simplified37.8
Taylor expanded around -inf 5.8
Simplified5.8
rmApplied add-cube-cbrt7.0
Applied add-cube-cbrt7.0
Applied add-sqr-sqrt35.2
Applied times-frac35.2
Applied prod-diff35.2
Simplified5.8
Simplified5.8
if -1.5476666036365373e+50 < b < 7.455592343308264e-170Initial program 12.4
Simplified12.4
rmApplied clear-num12.5
if 7.455592343308264e-170 < b Initial program 48.9
Simplified48.9
Taylor expanded around inf 14.1
Final simplification11.9
herbie shell --seed 2019323 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
: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)))