\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 3.49222195256563 \cdot 10^{-230}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -4, 0\right)}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r1381797 = b;
double r1381798 = -r1381797;
double r1381799 = r1381797 * r1381797;
double r1381800 = 4.0;
double r1381801 = a;
double r1381802 = c;
double r1381803 = r1381801 * r1381802;
double r1381804 = r1381800 * r1381803;
double r1381805 = r1381799 - r1381804;
double r1381806 = sqrt(r1381805);
double r1381807 = r1381798 + r1381806;
double r1381808 = 2.0;
double r1381809 = r1381808 * r1381801;
double r1381810 = r1381807 / r1381809;
return r1381810;
}
double f(double a, double b, double c) {
double r1381811 = b;
double r1381812 = 3.49222195256563e-230;
bool r1381813 = r1381811 <= r1381812;
double r1381814 = a;
double r1381815 = c;
double r1381816 = r1381814 * r1381815;
double r1381817 = -4.0;
double r1381818 = r1381811 * r1381811;
double r1381819 = fma(r1381816, r1381817, r1381818);
double r1381820 = sqrt(r1381819);
double r1381821 = r1381820 - r1381811;
double r1381822 = r1381821 / r1381814;
double r1381823 = 2.0;
double r1381824 = r1381822 / r1381823;
double r1381825 = 0.0;
double r1381826 = fma(r1381816, r1381817, r1381825);
double r1381827 = r1381811 + r1381820;
double r1381828 = r1381826 / r1381827;
double r1381829 = r1381828 / r1381814;
double r1381830 = r1381829 / r1381823;
double r1381831 = r1381813 ? r1381824 : r1381830;
return r1381831;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.5 |
| Herbie | 22.1 |
if b < 3.49222195256563e-230Initial program 20.8
Simplified20.8
if 3.49222195256563e-230 < b Initial program 45.9
Simplified45.9
rmApplied flip--46.0
Simplified23.5
Final simplification22.1
herbie shell --seed 2019155 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))