\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 -9661478263987.111328125:\\
\;\;\;\;\frac{c \cdot \sqrt[3]{-1}}{b} \cdot \left(\sqrt[3]{-1} \cdot \sqrt[3]{-1}\right)\\
\mathbf{elif}\;b \le -1.244932636718084290671504385697528170065 \cdot 10^{-183}:\\
\;\;\;\;\frac{\frac{a \cdot \left(c \cdot 4\right) + \left({b}^{2} - {b}^{2}\right)}{\sqrt{\mathsf{fma}\left(a, 4 \cdot \left(-c\right), {b}^{2}\right)} - b}}{2 \cdot a}\\
\mathbf{elif}\;b \le 2.280923374767716130571300401308257426651 \cdot 10^{83}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{\mathsf{fma}\left(a, 4 \cdot \left(-c\right), {b}^{2}\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r62835 = b;
double r62836 = -r62835;
double r62837 = r62835 * r62835;
double r62838 = 4.0;
double r62839 = a;
double r62840 = c;
double r62841 = r62839 * r62840;
double r62842 = r62838 * r62841;
double r62843 = r62837 - r62842;
double r62844 = sqrt(r62843);
double r62845 = r62836 - r62844;
double r62846 = 2.0;
double r62847 = r62846 * r62839;
double r62848 = r62845 / r62847;
return r62848;
}
double f(double a, double b, double c) {
double r62849 = b;
double r62850 = -9661478263987.111;
bool r62851 = r62849 <= r62850;
double r62852 = c;
double r62853 = -1.0;
double r62854 = cbrt(r62853);
double r62855 = r62852 * r62854;
double r62856 = r62855 / r62849;
double r62857 = r62854 * r62854;
double r62858 = r62856 * r62857;
double r62859 = -1.2449326367180843e-183;
bool r62860 = r62849 <= r62859;
double r62861 = a;
double r62862 = 4.0;
double r62863 = r62852 * r62862;
double r62864 = r62861 * r62863;
double r62865 = 2.0;
double r62866 = pow(r62849, r62865);
double r62867 = r62866 - r62866;
double r62868 = r62864 + r62867;
double r62869 = -r62852;
double r62870 = r62862 * r62869;
double r62871 = fma(r62861, r62870, r62866);
double r62872 = sqrt(r62871);
double r62873 = r62872 - r62849;
double r62874 = r62868 / r62873;
double r62875 = 2.0;
double r62876 = r62875 * r62861;
double r62877 = r62874 / r62876;
double r62878 = 2.280923374767716e+83;
bool r62879 = r62849 <= r62878;
double r62880 = -r62849;
double r62881 = r62880 / r62876;
double r62882 = r62872 / r62876;
double r62883 = r62881 - r62882;
double r62884 = 1.0;
double r62885 = r62852 / r62849;
double r62886 = r62849 / r62861;
double r62887 = r62885 - r62886;
double r62888 = r62884 * r62887;
double r62889 = r62879 ? r62883 : r62888;
double r62890 = r62860 ? r62877 : r62889;
double r62891 = r62851 ? r62858 : r62890;
return r62891;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.3 |
|---|---|
| Target | 21.1 |
| Herbie | 8.6 |
if b < -9661478263987.111Initial program 56.4
Taylor expanded around -inf 5.0
Simplified5.9
rmApplied *-un-lft-identity5.9
Applied *-un-lft-identity5.9
Applied times-frac5.9
Applied add-cube-cbrt5.9
Applied times-frac5.9
Simplified5.9
Simplified5.0
if -9661478263987.111 < b < -1.2449326367180843e-183Initial program 34.1
rmApplied flip--34.1
Simplified18.3
Simplified18.3
if -1.2449326367180843e-183 < b < 2.280923374767716e+83Initial program 10.5
rmApplied div-sub10.5
Simplified10.5
Simplified10.5
if 2.280923374767716e+83 < b Initial program 43.8
Taylor expanded around inf 3.5
Simplified3.5
Final simplification8.6
herbie shell --seed 2019194 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))