\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 -5.7874989996849275 \cdot 10^{-40}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le 1.7665622931893247 \cdot 10^{+83}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{\mathsf{fma}\left(-\sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}, \sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}, \sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}} \cdot \sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}\right) + \mathsf{fma}\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}, \sqrt[3]{-b}, \sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}} \cdot \left(-\sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}\right)\right)}{a}} \cdot \left(\sqrt[3]{\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}{a}} \cdot \sqrt[3]{\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}{a}}\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\end{array}double f(double a, double b, double c) {
double r1539886 = b;
double r1539887 = -r1539886;
double r1539888 = r1539886 * r1539886;
double r1539889 = 4.0;
double r1539890 = a;
double r1539891 = c;
double r1539892 = r1539890 * r1539891;
double r1539893 = r1539889 * r1539892;
double r1539894 = r1539888 - r1539893;
double r1539895 = sqrt(r1539894);
double r1539896 = r1539887 - r1539895;
double r1539897 = 2.0;
double r1539898 = r1539897 * r1539890;
double r1539899 = r1539896 / r1539898;
return r1539899;
}
double f(double a, double b, double c) {
double r1539900 = b;
double r1539901 = -5.7874989996849275e-40;
bool r1539902 = r1539900 <= r1539901;
double r1539903 = -2.0;
double r1539904 = c;
double r1539905 = r1539904 / r1539900;
double r1539906 = r1539903 * r1539905;
double r1539907 = 2.0;
double r1539908 = r1539906 / r1539907;
double r1539909 = 1.7665622931893247e+83;
bool r1539910 = r1539900 <= r1539909;
double r1539911 = a;
double r1539912 = -4.0;
double r1539913 = r1539911 * r1539912;
double r1539914 = r1539900 * r1539900;
double r1539915 = fma(r1539913, r1539904, r1539914);
double r1539916 = cbrt(r1539915);
double r1539917 = sqrt(r1539916);
double r1539918 = -r1539917;
double r1539919 = r1539916 * r1539916;
double r1539920 = sqrt(r1539919);
double r1539921 = r1539920 * r1539917;
double r1539922 = fma(r1539918, r1539920, r1539921);
double r1539923 = -r1539900;
double r1539924 = cbrt(r1539923);
double r1539925 = r1539924 * r1539924;
double r1539926 = -r1539920;
double r1539927 = r1539917 * r1539926;
double r1539928 = fma(r1539925, r1539924, r1539927);
double r1539929 = r1539922 + r1539928;
double r1539930 = r1539929 / r1539911;
double r1539931 = cbrt(r1539930);
double r1539932 = sqrt(r1539915);
double r1539933 = r1539923 - r1539932;
double r1539934 = r1539933 / r1539911;
double r1539935 = cbrt(r1539934);
double r1539936 = r1539935 * r1539935;
double r1539937 = r1539931 * r1539936;
double r1539938 = r1539937 / r1539907;
double r1539939 = r1539900 / r1539911;
double r1539940 = r1539905 - r1539939;
double r1539941 = r1539940 * r1539907;
double r1539942 = r1539941 / r1539907;
double r1539943 = r1539910 ? r1539938 : r1539942;
double r1539944 = r1539902 ? r1539908 : r1539943;
return r1539944;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.4 |
| Herbie | 10.1 |
if b < -5.7874989996849275e-40Initial program 53.7
Simplified53.7
Taylor expanded around -inf 7.3
if -5.7874989996849275e-40 < b < 1.7665622931893247e+83Initial program 13.8
Simplified13.8
rmApplied add-cube-cbrt14.7
rmApplied add-cube-cbrt14.6
Applied sqrt-prod14.6
Applied add-cube-cbrt14.6
Applied prod-diff14.7
if 1.7665622931893247e+83 < b Initial program 42.5
Simplified42.5
rmApplied div-inv42.5
Taylor expanded around inf 3.9
Simplified3.9
Final simplification10.1
herbie shell --seed 2019156 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))