\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 -7.70031330541463201 \cdot 10^{138}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.95103770532986732 \cdot 10^{-253}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le 4.18338381295531773 \cdot 10^{98}:\\
\;\;\;\;\frac{2 \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 r83992 = b;
double r83993 = -r83992;
double r83994 = r83992 * r83992;
double r83995 = 4.0;
double r83996 = a;
double r83997 = c;
double r83998 = r83996 * r83997;
double r83999 = r83995 * r83998;
double r84000 = r83994 - r83999;
double r84001 = sqrt(r84000);
double r84002 = r83993 + r84001;
double r84003 = 2.0;
double r84004 = r84003 * r83996;
double r84005 = r84002 / r84004;
return r84005;
}
double f(double a, double b, double c) {
double r84006 = b;
double r84007 = -7.700313305414632e+138;
bool r84008 = r84006 <= r84007;
double r84009 = 1.0;
double r84010 = c;
double r84011 = r84010 / r84006;
double r84012 = a;
double r84013 = r84006 / r84012;
double r84014 = r84011 - r84013;
double r84015 = r84009 * r84014;
double r84016 = -3.9510377053298673e-253;
bool r84017 = r84006 <= r84016;
double r84018 = -r84006;
double r84019 = r84006 * r84006;
double r84020 = 4.0;
double r84021 = r84012 * r84010;
double r84022 = r84020 * r84021;
double r84023 = r84019 - r84022;
double r84024 = sqrt(r84023);
double r84025 = r84018 + r84024;
double r84026 = 2.0;
double r84027 = r84026 * r84012;
double r84028 = r84025 / r84027;
double r84029 = 4.183383812955318e+98;
bool r84030 = r84006 <= r84029;
double r84031 = r84026 * r84010;
double r84032 = r84018 - r84024;
double r84033 = r84031 / r84032;
double r84034 = -1.0;
double r84035 = r84034 * r84011;
double r84036 = r84030 ? r84033 : r84035;
double r84037 = r84017 ? r84028 : r84036;
double r84038 = r84008 ? r84015 : r84037;
return r84038;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 21.1 |
| Herbie | 6.7 |
if b < -7.700313305414632e+138Initial program 57.3
Taylor expanded around -inf 2.9
Simplified2.9
if -7.700313305414632e+138 < b < -3.9510377053298673e-253Initial program 8.0
if -3.9510377053298673e-253 < b < 4.183383812955318e+98Initial program 29.8
rmApplied clear-num29.9
rmApplied flip-+29.9
Applied associate-/r/30.0
Applied associate-/r*30.0
Simplified15.8
Taylor expanded around 0 9.8
if 4.183383812955318e+98 < b Initial program 59.5
Taylor expanded around inf 2.8
Final simplification6.7
herbie shell --seed 2020065
(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)))