\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 -2.6487898413435469 \cdot 10^{-64}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 1.43504028250552318 \cdot 10^{146}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - 0.5 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r114836 = b;
double r114837 = -r114836;
double r114838 = r114836 * r114836;
double r114839 = 4.0;
double r114840 = a;
double r114841 = c;
double r114842 = r114840 * r114841;
double r114843 = r114839 * r114842;
double r114844 = r114838 - r114843;
double r114845 = sqrt(r114844);
double r114846 = r114837 - r114845;
double r114847 = 2.0;
double r114848 = r114847 * r114840;
double r114849 = r114846 / r114848;
return r114849;
}
double f(double a, double b, double c) {
double r114850 = b;
double r114851 = -2.648789841343547e-64;
bool r114852 = r114850 <= r114851;
double r114853 = -1.0;
double r114854 = c;
double r114855 = r114854 / r114850;
double r114856 = r114853 * r114855;
double r114857 = 1.4350402825055232e+146;
bool r114858 = r114850 <= r114857;
double r114859 = -r114850;
double r114860 = 2.0;
double r114861 = a;
double r114862 = r114860 * r114861;
double r114863 = r114859 / r114862;
double r114864 = r114850 * r114850;
double r114865 = 4.0;
double r114866 = r114861 * r114854;
double r114867 = r114865 * r114866;
double r114868 = r114864 - r114867;
double r114869 = sqrt(r114868);
double r114870 = r114869 / r114862;
double r114871 = r114863 - r114870;
double r114872 = 0.5;
double r114873 = r114850 / r114861;
double r114874 = r114872 * r114873;
double r114875 = r114863 - r114874;
double r114876 = r114858 ? r114871 : r114875;
double r114877 = r114852 ? r114856 : r114876;
return r114877;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 20.7 |
| Herbie | 9.5 |
if b < -2.648789841343547e-64Initial program 53.8
Taylor expanded around -inf 7.9
if -2.648789841343547e-64 < b < 1.4350402825055232e+146Initial program 12.4
rmApplied div-sub12.4
if 1.4350402825055232e+146 < b Initial program 60.9
rmApplied div-sub60.9
rmApplied *-un-lft-identity60.9
Applied sqrt-prod60.9
Applied associate-/l*60.9
Taylor expanded around 0 2.8
Final simplification9.5
herbie shell --seed 2020049 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:precision binary64
:herbie-target
(if (< b 0.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)))