double f(double a, double b, double c) {
double r3516001 = b;
double r3516002 = -r3516001;
double r3516003 = r3516001 * r3516001;
double r3516004 = 4.0;
double r3516005 = a;
double r3516006 = c;
double r3516007 = r3516005 * r3516006;
double r3516008 = r3516004 * r3516007;
double r3516009 = r3516003 - r3516008;
double r3516010 = sqrt(r3516009);
double r3516011 = r3516002 + r3516010;
double r3516012 = 2.0;
double r3516013 = r3516012 * r3516005;
double r3516014 = r3516011 / r3516013;
return r3516014;
}
double f(double a, double b, double c) {
double r3516015 = b;
double r3516016 = -4.1061641587957725e+142;
bool r3516017 = r3516015 <= r3516016;
double r3516018 = c;
double r3516019 = r3516018 / r3516015;
double r3516020 = a;
double r3516021 = r3516015 / r3516020;
double r3516022 = r3516019 - r3516021;
double r3516023 = 4.92308681460715e-109;
bool r3516024 = r3516015 <= r3516023;
double r3516025 = r3516018 * r3516020;
double r3516026 = -4.0;
double r3516027 = r3516025 * r3516026;
double r3516028 = fma(r3516015, r3516015, r3516027);
double r3516029 = sqrt(r3516028);
double r3516030 = sqrt(r3516029);
double r3516031 = -r3516015;
double r3516032 = fma(r3516030, r3516030, r3516031);
double r3516033 = 2.0;
double r3516034 = r3516032 / r3516033;
double r3516035 = r3516034 / r3516020;
double r3516036 = 6.2093480529009754e-80;
bool r3516037 = r3516015 <= r3516036;
double r3516038 = -r3516019;
double r3516039 = 27437652342722.5;
bool r3516040 = r3516015 <= r3516039;
double r3516041 = -2.0;
double r3516042 = r3516041 * r3516020;
double r3516043 = r3516018 * r3516042;
double r3516044 = r3516015 * r3516015;
double r3516045 = fma(r3516025, r3516026, r3516044);
double r3516046 = sqrt(r3516045);
double r3516047 = r3516046 + r3516015;
double r3516048 = r3516020 * r3516047;
double r3516049 = r3516043 / r3516048;
double r3516050 = r3516040 ? r3516049 : r3516038;
double r3516051 = r3516037 ? r3516038 : r3516050;
double r3516052 = r3516024 ? r3516035 : r3516051;
double r3516053 = r3516017 ? r3516022 : r3516052;
return r3516053;
}
\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 -4.1061641587957725 \cdot 10^{+142}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 4.92308681460715 \cdot 10^{-109}:\\
\;\;\;\;\frac{\frac{(\left(\sqrt{\sqrt{(b \cdot b + \left(\left(c \cdot a\right) \cdot -4\right))_*}}\right) \cdot \left(\sqrt{\sqrt{(b \cdot b + \left(\left(c \cdot a\right) \cdot -4\right))_*}}\right) + \left(-b\right))_*}{2}}{a}\\
\mathbf{elif}\;b \le 6.2093480529009754 \cdot 10^{-80}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 27437652342722.5:\\
\;\;\;\;\frac{c \cdot \left(-2 \cdot a\right)}{a \cdot \left(\sqrt{(\left(c \cdot a\right) \cdot -4 + \left(b \cdot b\right))_*} + b\right)}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}



Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.8 |
|---|---|
| Target | 21.0 |
| Herbie | 9.8 |
if b < -4.1061641587957725e+142Initial program 56.5
Simplified56.5
Taylor expanded around -inf 2.7
if -4.1061641587957725e+142 < b < 4.92308681460715e-109Initial program 11.8
Simplified11.8
rmApplied add-sqr-sqrt12.0
Applied fma-neg12.0
if 4.92308681460715e-109 < b < 6.2093480529009754e-80 or 27437652342722.5 < b Initial program 53.9
Simplified53.9
Taylor expanded around inf 7.3
Simplified7.3
if 6.2093480529009754e-80 < b < 27437652342722.5Initial program 40.7
Simplified40.7
rmApplied *-un-lft-identity40.7
Applied div-inv40.7
Applied times-frac40.7
Simplified40.7
Simplified40.7
Taylor expanded around -inf 40.7
Simplified40.7
rmApplied flip--40.8
Applied frac-times43.0
Simplified20.2
Final simplification9.8
herbie shell --seed 2019102 +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)))