\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 -1.7431685240570133 \cdot 10^{102}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.7602322353181793 \cdot 10^{-224}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le 2.899165545458595 \cdot 10^{102}:\\
\;\;\;\;\frac{\frac{1}{0.5} \cdot c}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r72930 = b;
double r72931 = -r72930;
double r72932 = r72930 * r72930;
double r72933 = 4.0;
double r72934 = a;
double r72935 = c;
double r72936 = r72934 * r72935;
double r72937 = r72933 * r72936;
double r72938 = r72932 - r72937;
double r72939 = sqrt(r72938);
double r72940 = r72931 + r72939;
double r72941 = 2.0;
double r72942 = r72941 * r72934;
double r72943 = r72940 / r72942;
return r72943;
}
double f(double a, double b, double c) {
double r72944 = b;
double r72945 = -1.7431685240570133e+102;
bool r72946 = r72944 <= r72945;
double r72947 = 1.0;
double r72948 = c;
double r72949 = r72948 / r72944;
double r72950 = a;
double r72951 = r72944 / r72950;
double r72952 = r72949 - r72951;
double r72953 = r72947 * r72952;
double r72954 = -3.7602322353181793e-224;
bool r72955 = r72944 <= r72954;
double r72956 = -r72944;
double r72957 = r72944 * r72944;
double r72958 = 4.0;
double r72959 = r72950 * r72948;
double r72960 = r72958 * r72959;
double r72961 = r72957 - r72960;
double r72962 = sqrt(r72961);
double r72963 = r72956 + r72962;
double r72964 = 2.0;
double r72965 = r72964 * r72950;
double r72966 = r72963 / r72965;
double r72967 = 2.8991655454585953e+102;
bool r72968 = r72944 <= r72967;
double r72969 = 1.0;
double r72970 = 0.5;
double r72971 = r72969 / r72970;
double r72972 = r72971 * r72948;
double r72973 = r72956 - r72962;
double r72974 = r72972 / r72973;
double r72975 = -1.0;
double r72976 = r72975 * r72949;
double r72977 = r72968 ? r72974 : r72976;
double r72978 = r72955 ? r72966 : r72977;
double r72979 = r72946 ? r72953 : r72978;
return r72979;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 20.5 |
| Herbie | 6.4 |
if b < -1.7431685240570133e+102Initial program 47.4
Taylor expanded around -inf 3.1
Simplified3.1
if -1.7431685240570133e+102 < b < -3.7602322353181793e-224Initial program 7.7
if -3.7602322353181793e-224 < b < 2.8991655454585953e+102Initial program 30.5
rmApplied flip-+30.6
Simplified16.8
rmApplied *-un-lft-identity16.8
Applied *-un-lft-identity16.8
Applied times-frac16.8
Applied associate-/l*17.0
Simplified16.1
Taylor expanded around 0 10.0
rmApplied associate-/r*9.6
Simplified9.6
if 2.8991655454585953e+102 < b Initial program 59.9
Taylor expanded around inf 2.3
Final simplification6.4
herbie shell --seed 2020024 +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)))