\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.56950087216670373 \cdot 10^{75}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 3.36200651545441365 \cdot 10^{-75}:\\
\;\;\;\;\frac{1}{\frac{a}{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2}}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r124862 = b;
double r124863 = -r124862;
double r124864 = r124862 * r124862;
double r124865 = 4.0;
double r124866 = a;
double r124867 = r124865 * r124866;
double r124868 = c;
double r124869 = r124867 * r124868;
double r124870 = r124864 - r124869;
double r124871 = sqrt(r124870);
double r124872 = r124863 + r124871;
double r124873 = 2.0;
double r124874 = r124873 * r124866;
double r124875 = r124872 / r124874;
return r124875;
}
double f(double a, double b, double c) {
double r124876 = b;
double r124877 = -3.5695008721667037e+75;
bool r124878 = r124876 <= r124877;
double r124879 = 1.0;
double r124880 = c;
double r124881 = r124880 / r124876;
double r124882 = a;
double r124883 = r124876 / r124882;
double r124884 = r124881 - r124883;
double r124885 = r124879 * r124884;
double r124886 = 3.3620065154544137e-75;
bool r124887 = r124876 <= r124886;
double r124888 = 1.0;
double r124889 = r124876 * r124876;
double r124890 = 4.0;
double r124891 = r124890 * r124882;
double r124892 = r124891 * r124880;
double r124893 = r124889 - r124892;
double r124894 = sqrt(r124893);
double r124895 = r124894 - r124876;
double r124896 = 2.0;
double r124897 = r124895 / r124896;
double r124898 = r124882 / r124897;
double r124899 = r124888 / r124898;
double r124900 = -1.0;
double r124901 = r124900 * r124881;
double r124902 = r124887 ? r124899 : r124901;
double r124903 = r124878 ? r124885 : r124902;
return r124903;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 21.2 |
| Herbie | 10.2 |
if b < -3.5695008721667037e+75Initial program 42.1
Simplified42.1
Taylor expanded around -inf 4.0
Simplified4.0
if -3.5695008721667037e+75 < b < 3.3620065154544137e-75Initial program 13.4
Simplified13.4
rmApplied *-un-lft-identity13.4
Applied *-un-lft-identity13.4
Applied times-frac13.4
Applied associate-/l*13.5
if 3.3620065154544137e-75 < b Initial program 53.0
Simplified53.0
Taylor expanded around inf 9.3
Final simplification10.2
herbie shell --seed 2019195 +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)))