\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 1.0417939395900796 \cdot 10^{-259}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le 9.37351117144741807 \cdot 10^{103}:\\
\;\;\;\;\frac{1}{0.5 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)} \cdot c\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r56909 = b;
double r56910 = -r56909;
double r56911 = r56909 * r56909;
double r56912 = 4.0;
double r56913 = a;
double r56914 = c;
double r56915 = r56913 * r56914;
double r56916 = r56912 * r56915;
double r56917 = r56911 - r56916;
double r56918 = sqrt(r56917);
double r56919 = r56910 + r56918;
double r56920 = 2.0;
double r56921 = r56920 * r56913;
double r56922 = r56919 / r56921;
return r56922;
}
double f(double a, double b, double c) {
double r56923 = b;
double r56924 = -1.7431685240570133e+102;
bool r56925 = r56923 <= r56924;
double r56926 = 1.0;
double r56927 = c;
double r56928 = r56927 / r56923;
double r56929 = a;
double r56930 = r56923 / r56929;
double r56931 = r56928 - r56930;
double r56932 = r56926 * r56931;
double r56933 = 1.0417939395900796e-259;
bool r56934 = r56923 <= r56933;
double r56935 = -r56923;
double r56936 = r56923 * r56923;
double r56937 = 4.0;
double r56938 = r56929 * r56927;
double r56939 = r56937 * r56938;
double r56940 = r56936 - r56939;
double r56941 = sqrt(r56940);
double r56942 = r56935 + r56941;
double r56943 = 2.0;
double r56944 = r56943 * r56929;
double r56945 = r56942 / r56944;
double r56946 = 9.373511171447418e+103;
bool r56947 = r56923 <= r56946;
double r56948 = 1.0;
double r56949 = 0.5;
double r56950 = r56935 - r56941;
double r56951 = r56949 * r56950;
double r56952 = r56948 / r56951;
double r56953 = r56952 * r56927;
double r56954 = -1.0;
double r56955 = r56954 * r56928;
double r56956 = r56947 ? r56953 : r56955;
double r56957 = r56934 ? r56945 : r56956;
double r56958 = r56925 ? r56932 : r56957;
return r56958;
}




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 < 1.0417939395900796e-259Initial program 9.6
if 1.0417939395900796e-259 < b < 9.373511171447418e+103Initial program 35.0
rmApplied flip-+35.0
Simplified17.0
rmApplied clear-num17.2
Simplified16.1
Taylor expanded around 0 8.3
rmApplied associate-*l/8.2
Applied associate-/r/7.8
if 9.373511171447418e+103 < b Initial program 59.9
Taylor expanded around inf 2.3
Final simplification6.4
herbie shell --seed 2020024
(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)))