\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 -3.828737593568666707297780122417133955299 \cdot 10^{109}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le -4.565615297402513793822059617442033581563 \cdot 10^{-201}:\\
\;\;\;\;\frac{\left|\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right| \cdot \sqrt{\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}} + \left(-b\right)}{2 \cdot a}\\
\mathbf{elif}\;b \le 4.287176096066254708923845932443784224798 \cdot 10^{77}:\\
\;\;\;\;\frac{\frac{\frac{1}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{\frac{\sqrt[3]{a}}{\frac{\sqrt[3]{a}}{\frac{1}{4}}}}}{\sqrt[3]{a}} \cdot \frac{c}{\frac{\sqrt[3]{a}}{\frac{\sqrt[3]{a} \cdot \sqrt[3]{a}}{2}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1 \cdot c}{b}\\
\end{array}double f(double a, double b, double c) {
double r376818 = b;
double r376819 = -r376818;
double r376820 = r376818 * r376818;
double r376821 = 4.0;
double r376822 = a;
double r376823 = r376821 * r376822;
double r376824 = c;
double r376825 = r376823 * r376824;
double r376826 = r376820 - r376825;
double r376827 = sqrt(r376826);
double r376828 = r376819 + r376827;
double r376829 = 2.0;
double r376830 = r376829 * r376822;
double r376831 = r376828 / r376830;
return r376831;
}
double f(double a, double b, double c) {
double r376832 = b;
double r376833 = -3.828737593568667e+109;
bool r376834 = r376832 <= r376833;
double r376835 = c;
double r376836 = r376835 / r376832;
double r376837 = a;
double r376838 = r376832 / r376837;
double r376839 = r376836 - r376838;
double r376840 = 1.0;
double r376841 = r376839 * r376840;
double r376842 = -4.565615297402514e-201;
bool r376843 = r376832 <= r376842;
double r376844 = r376832 * r376832;
double r376845 = 4.0;
double r376846 = r376845 * r376837;
double r376847 = r376846 * r376835;
double r376848 = r376844 - r376847;
double r376849 = cbrt(r376848);
double r376850 = fabs(r376849);
double r376851 = sqrt(r376849);
double r376852 = r376850 * r376851;
double r376853 = -r376832;
double r376854 = r376852 + r376853;
double r376855 = 2.0;
double r376856 = r376855 * r376837;
double r376857 = r376854 / r376856;
double r376858 = 4.2871760960662547e+77;
bool r376859 = r376832 <= r376858;
double r376860 = 1.0;
double r376861 = sqrt(r376848);
double r376862 = r376853 - r376861;
double r376863 = r376860 / r376862;
double r376864 = cbrt(r376837);
double r376865 = r376860 / r376845;
double r376866 = r376864 / r376865;
double r376867 = r376864 / r376866;
double r376868 = r376863 / r376867;
double r376869 = r376868 / r376864;
double r376870 = r376864 * r376864;
double r376871 = r376870 / r376855;
double r376872 = r376864 / r376871;
double r376873 = r376835 / r376872;
double r376874 = r376869 * r376873;
double r376875 = -1.0;
double r376876 = r376875 * r376835;
double r376877 = r376876 / r376832;
double r376878 = r376859 ? r376874 : r376877;
double r376879 = r376843 ? r376857 : r376878;
double r376880 = r376834 ? r376841 : r376879;
return r376880;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 21.0 |
| Herbie | 7.8 |
if b < -3.828737593568667e+109Initial program 49.5
Taylor expanded around -inf 3.7
Simplified3.7
if -3.828737593568667e+109 < b < -4.565615297402514e-201Initial program 8.1
rmApplied add-cube-cbrt8.5
Applied sqrt-prod8.5
Simplified8.5
if -4.565615297402514e-201 < b < 4.2871760960662547e+77Initial program 28.4
rmApplied flip-+28.5
Simplified16.7
rmApplied associate-/r*16.7
Simplified14.5
rmApplied add-cube-cbrt15.4
Applied associate-/r*15.4
Simplified12.1
rmApplied *-un-lft-identity12.1
Applied cbrt-prod12.1
Applied div-inv12.1
Applied add-cube-cbrt11.4
Applied times-frac11.4
Applied times-frac11.4
Applied div-inv11.4
Applied times-frac12.4
Applied times-frac12.0
if 4.2871760960662547e+77 < b Initial program 58.5
Taylor expanded around inf 3.5
Simplified3.5
Final simplification7.8
herbie shell --seed 2019196
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))