\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 -1.763315479739403460017265344144602342789 \cdot 10^{89}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{c}{b}, 2, \frac{b}{a} \cdot -2\right)}{2}\\
\mathbf{elif}\;b \le 9.136492990928292133394320076175633285536 \cdot 10^{-23}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \left(\sqrt{b \cdot b - a \cdot \left(4 \cdot c\right)} - b\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\
\end{array}double f(double a, double b, double c) {
double r4718828 = b;
double r4718829 = -r4718828;
double r4718830 = r4718828 * r4718828;
double r4718831 = 4.0;
double r4718832 = a;
double r4718833 = r4718831 * r4718832;
double r4718834 = c;
double r4718835 = r4718833 * r4718834;
double r4718836 = r4718830 - r4718835;
double r4718837 = sqrt(r4718836);
double r4718838 = r4718829 + r4718837;
double r4718839 = 2.0;
double r4718840 = r4718839 * r4718832;
double r4718841 = r4718838 / r4718840;
return r4718841;
}
double f(double a, double b, double c) {
double r4718842 = b;
double r4718843 = -1.7633154797394035e+89;
bool r4718844 = r4718842 <= r4718843;
double r4718845 = c;
double r4718846 = r4718845 / r4718842;
double r4718847 = 2.0;
double r4718848 = a;
double r4718849 = r4718842 / r4718848;
double r4718850 = -2.0;
double r4718851 = r4718849 * r4718850;
double r4718852 = fma(r4718846, r4718847, r4718851);
double r4718853 = r4718852 / r4718847;
double r4718854 = 9.136492990928292e-23;
bool r4718855 = r4718842 <= r4718854;
double r4718856 = 1.0;
double r4718857 = r4718856 / r4718848;
double r4718858 = r4718842 * r4718842;
double r4718859 = 4.0;
double r4718860 = r4718859 * r4718845;
double r4718861 = r4718848 * r4718860;
double r4718862 = r4718858 - r4718861;
double r4718863 = sqrt(r4718862);
double r4718864 = r4718863 - r4718842;
double r4718865 = r4718857 * r4718864;
double r4718866 = r4718865 / r4718847;
double r4718867 = -2.0;
double r4718868 = r4718846 * r4718867;
double r4718869 = r4718868 / r4718847;
double r4718870 = r4718855 ? r4718866 : r4718869;
double r4718871 = r4718844 ? r4718853 : r4718870;
return r4718871;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.4 |
|---|---|
| Target | 21.3 |
| Herbie | 10.3 |
if b < -1.7633154797394035e+89Initial program 45.7
Simplified45.7
rmApplied div-inv45.8
Taylor expanded around -inf 3.9
Simplified3.9
if -1.7633154797394035e+89 < b < 9.136492990928292e-23Initial program 15.0
Simplified15.1
rmApplied div-inv15.2
if 9.136492990928292e-23 < b Initial program 55.5
Simplified55.4
Taylor expanded around inf 6.7
Final simplification10.3
herbie shell --seed 2019172 +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)))