\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 -7.406397712303184 \cdot 10^{-53}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le 2.9822108876570007 \cdot 10^{+66}:\\
\;\;\;\;-\frac{\frac{\sqrt{\mathsf{fma}\left(c, -4 \cdot a, b \cdot b\right)} + b}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{b}{a} \cdot -2}{2}\\
\end{array}double f(double a, double b, double c) {
double r1365809 = b;
double r1365810 = -r1365809;
double r1365811 = r1365809 * r1365809;
double r1365812 = 4.0;
double r1365813 = a;
double r1365814 = c;
double r1365815 = r1365813 * r1365814;
double r1365816 = r1365812 * r1365815;
double r1365817 = r1365811 - r1365816;
double r1365818 = sqrt(r1365817);
double r1365819 = r1365810 - r1365818;
double r1365820 = 2.0;
double r1365821 = r1365820 * r1365813;
double r1365822 = r1365819 / r1365821;
return r1365822;
}
double f(double a, double b, double c) {
double r1365823 = b;
double r1365824 = -7.406397712303184e-53;
bool r1365825 = r1365823 <= r1365824;
double r1365826 = -2.0;
double r1365827 = c;
double r1365828 = r1365827 / r1365823;
double r1365829 = r1365826 * r1365828;
double r1365830 = 2.0;
double r1365831 = r1365829 / r1365830;
double r1365832 = 2.9822108876570007e+66;
bool r1365833 = r1365823 <= r1365832;
double r1365834 = -4.0;
double r1365835 = a;
double r1365836 = r1365834 * r1365835;
double r1365837 = r1365823 * r1365823;
double r1365838 = fma(r1365827, r1365836, r1365837);
double r1365839 = sqrt(r1365838);
double r1365840 = r1365839 + r1365823;
double r1365841 = r1365840 / r1365835;
double r1365842 = r1365841 / r1365830;
double r1365843 = -r1365842;
double r1365844 = r1365823 / r1365835;
double r1365845 = r1365844 * r1365826;
double r1365846 = r1365845 / r1365830;
double r1365847 = r1365833 ? r1365843 : r1365846;
double r1365848 = r1365825 ? r1365831 : r1365847;
return r1365848;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.7 |
|---|---|
| Target | 20.7 |
| Herbie | 10.1 |
if b < -7.406397712303184e-53Initial program 53.9
Simplified53.9
Taylor expanded around -inf 7.7
if -7.406397712303184e-53 < b < 2.9822108876570007e+66Initial program 13.9
Simplified13.9
rmApplied div-inv14.0
rmApplied associate-*r/13.9
Simplified13.9
if 2.9822108876570007e+66 < b Initial program 38.4
Simplified38.4
rmApplied div-inv38.5
rmApplied associate-*r/38.4
Simplified38.4
Taylor expanded around 0 6.1
Final simplification10.1
herbie shell --seed 2019146 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
: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)))