\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 -3995085856351435358208:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le -3.157831273622663951144423397678142349188 \cdot 10^{-243}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\sqrt[3]{b} \cdot \sqrt[3]{b}, -\sqrt[3]{b}, \sqrt{b \cdot b - c \cdot \left(a \cdot 4\right)}\right)}{a \cdot 2}\\
\mathbf{elif}\;b \le 1.721977985627455758133160718776844978069 \cdot 10^{83}:\\
\;\;\;\;\frac{4 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, \left(4 \cdot c\right) \cdot \left(-a\right)\right)}} \cdot \frac{1}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} \cdot -1\\
\end{array}double f(double a, double b, double c) {
double r114854 = b;
double r114855 = -r114854;
double r114856 = r114854 * r114854;
double r114857 = 4.0;
double r114858 = a;
double r114859 = r114857 * r114858;
double r114860 = c;
double r114861 = r114859 * r114860;
double r114862 = r114856 - r114861;
double r114863 = sqrt(r114862);
double r114864 = r114855 + r114863;
double r114865 = 2.0;
double r114866 = r114865 * r114858;
double r114867 = r114864 / r114866;
return r114867;
}
double f(double a, double b, double c) {
double r114868 = b;
double r114869 = -3.9950858563514354e+21;
bool r114870 = r114868 <= r114869;
double r114871 = c;
double r114872 = r114871 / r114868;
double r114873 = a;
double r114874 = r114868 / r114873;
double r114875 = r114872 - r114874;
double r114876 = 1.0;
double r114877 = r114875 * r114876;
double r114878 = -3.157831273622664e-243;
bool r114879 = r114868 <= r114878;
double r114880 = cbrt(r114868);
double r114881 = r114880 * r114880;
double r114882 = -r114880;
double r114883 = r114868 * r114868;
double r114884 = 4.0;
double r114885 = r114873 * r114884;
double r114886 = r114871 * r114885;
double r114887 = r114883 - r114886;
double r114888 = sqrt(r114887);
double r114889 = fma(r114881, r114882, r114888);
double r114890 = 2.0;
double r114891 = r114873 * r114890;
double r114892 = r114889 / r114891;
double r114893 = 1.7219779856274558e+83;
bool r114894 = r114868 <= r114893;
double r114895 = r114884 * r114871;
double r114896 = -r114868;
double r114897 = -r114873;
double r114898 = r114895 * r114897;
double r114899 = fma(r114868, r114868, r114898);
double r114900 = sqrt(r114899);
double r114901 = r114896 - r114900;
double r114902 = r114895 / r114901;
double r114903 = 1.0;
double r114904 = r114903 / r114890;
double r114905 = r114902 * r114904;
double r114906 = -1.0;
double r114907 = r114872 * r114906;
double r114908 = r114894 ? r114905 : r114907;
double r114909 = r114879 ? r114892 : r114908;
double r114910 = r114870 ? r114877 : r114909;
return r114910;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.6 |
|---|---|
| Target | 21.0 |
| Herbie | 7.0 |
if b < -3.9950858563514354e+21Initial program 35.4
Taylor expanded around -inf 6.5
Simplified6.5
if -3.9950858563514354e+21 < b < -3.157831273622664e-243Initial program 9.4
rmApplied add-cube-cbrt9.7
Applied distribute-rgt-neg-in9.7
Applied fma-def9.7
if -3.157831273622664e-243 < b < 1.7219779856274558e+83Initial program 29.5
rmApplied flip-+29.6
Simplified16.0
Simplified16.0
rmApplied *-un-lft-identity16.0
Applied *-un-lft-identity16.0
Applied times-frac16.0
Applied times-frac16.0
Simplified16.0
Simplified15.1
Taylor expanded around 0 9.3
if 1.7219779856274558e+83 < b Initial program 59.0
Taylor expanded around inf 2.5
Final simplification7.0
herbie shell --seed 2019194 +o rules:numerics
(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)))