\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 -8.889080831912834239838349081155498349678 \cdot 10^{153}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 7.666823646884851555969061278738005639466 \cdot 10^{-125}:\\
\;\;\;\;\frac{\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2}}{a}\\
\mathbf{elif}\;b \le 4.748509933493459937245034418847441018411 \cdot 10^{91}:\\
\;\;\;\;\frac{\frac{1}{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{4}}}{2} \cdot \frac{a \cdot c}{a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r75879 = b;
double r75880 = -r75879;
double r75881 = r75879 * r75879;
double r75882 = 4.0;
double r75883 = a;
double r75884 = c;
double r75885 = r75883 * r75884;
double r75886 = r75882 * r75885;
double r75887 = r75881 - r75886;
double r75888 = sqrt(r75887);
double r75889 = r75880 + r75888;
double r75890 = 2.0;
double r75891 = r75890 * r75883;
double r75892 = r75889 / r75891;
return r75892;
}
double f(double a, double b, double c) {
double r75893 = b;
double r75894 = -8.889080831912834e+153;
bool r75895 = r75893 <= r75894;
double r75896 = 1.0;
double r75897 = c;
double r75898 = r75897 / r75893;
double r75899 = a;
double r75900 = r75893 / r75899;
double r75901 = r75898 - r75900;
double r75902 = r75896 * r75901;
double r75903 = 7.666823646884852e-125;
bool r75904 = r75893 <= r75903;
double r75905 = -r75893;
double r75906 = r75893 * r75893;
double r75907 = 4.0;
double r75908 = r75899 * r75897;
double r75909 = r75907 * r75908;
double r75910 = r75906 - r75909;
double r75911 = sqrt(r75910);
double r75912 = r75905 + r75911;
double r75913 = 2.0;
double r75914 = r75912 / r75913;
double r75915 = r75914 / r75899;
double r75916 = 4.74850993349346e+91;
bool r75917 = r75893 <= r75916;
double r75918 = 1.0;
double r75919 = r75905 - r75911;
double r75920 = r75919 / r75907;
double r75921 = r75918 / r75920;
double r75922 = r75921 / r75913;
double r75923 = r75908 / r75899;
double r75924 = r75922 * r75923;
double r75925 = -1.0;
double r75926 = r75925 * r75898;
double r75927 = r75917 ? r75924 : r75926;
double r75928 = r75904 ? r75915 : r75927;
double r75929 = r75895 ? r75902 : r75928;
return r75929;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 20.8 |
| Herbie | 8.7 |
if b < -8.889080831912834e+153Initial program 64.0
Taylor expanded around -inf 2.8
Simplified2.8
if -8.889080831912834e+153 < b < 7.666823646884852e-125Initial program 11.0
rmApplied associate-/r*11.0
if 7.666823646884852e-125 < b < 4.74850993349346e+91Initial program 40.1
rmApplied flip-+40.1
Simplified15.8
rmApplied clear-num16.1
Simplified16.1
rmApplied div-inv16.5
Applied add-sqr-sqrt16.5
Applied times-frac16.3
Applied times-frac15.4
Simplified15.4
Simplified14.7
if 4.74850993349346e+91 < b Initial program 59.5
Taylor expanded around inf 2.5
Final simplification8.7
herbie shell --seed 2019347 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
:precision binary64
:herbie-target
(if (< b 0.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)))