\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.6405873985286624 \cdot 10^{+100}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 3.369909182519315 \cdot 10^{-189}:\\
\;\;\;\;\frac{1}{\frac{a \cdot 2}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{elif}\;b \le 538194855109.15985:\\
\;\;\;\;-\frac{\frac{\left(4 \cdot a\right) \cdot c}{\frac{a}{\frac{1}{2}}}}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + b}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r5723005 = b;
double r5723006 = -r5723005;
double r5723007 = r5723005 * r5723005;
double r5723008 = 4.0;
double r5723009 = a;
double r5723010 = c;
double r5723011 = r5723009 * r5723010;
double r5723012 = r5723008 * r5723011;
double r5723013 = r5723007 - r5723012;
double r5723014 = sqrt(r5723013);
double r5723015 = r5723006 + r5723014;
double r5723016 = 2.0;
double r5723017 = r5723016 * r5723009;
double r5723018 = r5723015 / r5723017;
return r5723018;
}
double f(double a, double b, double c) {
double r5723019 = b;
double r5723020 = -1.6405873985286624e+100;
bool r5723021 = r5723019 <= r5723020;
double r5723022 = c;
double r5723023 = r5723022 / r5723019;
double r5723024 = a;
double r5723025 = r5723019 / r5723024;
double r5723026 = r5723023 - r5723025;
double r5723027 = 3.369909182519315e-189;
bool r5723028 = r5723019 <= r5723027;
double r5723029 = 1.0;
double r5723030 = 2.0;
double r5723031 = r5723024 * r5723030;
double r5723032 = r5723019 * r5723019;
double r5723033 = 4.0;
double r5723034 = r5723033 * r5723024;
double r5723035 = r5723034 * r5723022;
double r5723036 = r5723032 - r5723035;
double r5723037 = sqrt(r5723036);
double r5723038 = r5723037 - r5723019;
double r5723039 = r5723031 / r5723038;
double r5723040 = r5723029 / r5723039;
double r5723041 = 538194855109.15985;
bool r5723042 = r5723019 <= r5723041;
double r5723043 = 0.5;
double r5723044 = r5723024 / r5723043;
double r5723045 = r5723035 / r5723044;
double r5723046 = r5723037 + r5723019;
double r5723047 = r5723045 / r5723046;
double r5723048 = -r5723047;
double r5723049 = -r5723023;
double r5723050 = r5723042 ? r5723048 : r5723049;
double r5723051 = r5723028 ? r5723040 : r5723050;
double r5723052 = r5723021 ? r5723026 : r5723051;
return r5723052;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.1 |
|---|---|
| Target | 20.2 |
| Herbie | 9.3 |
if b < -1.6405873985286624e+100Initial program 45.5
Simplified45.5
Taylor expanded around -inf 4.1
if -1.6405873985286624e+100 < b < 3.369909182519315e-189Initial program 10.3
Simplified10.3
rmApplied *-un-lft-identity10.3
Applied *-un-lft-identity10.3
Applied distribute-lft-out--10.3
Applied associate-/l*10.4
if 3.369909182519315e-189 < b < 538194855109.15985Initial program 32.9
Simplified32.9
rmApplied *-un-lft-identity32.9
Applied *-un-lft-identity32.9
Applied distribute-lft-out--32.9
Applied associate-/l*32.9
rmApplied flip--33.0
Applied associate-/r/33.1
Applied associate-/r*33.1
Simplified19.1
if 538194855109.15985 < b Initial program 54.5
Simplified54.5
Taylor expanded around inf 5.9
Simplified5.9
Final simplification9.3
herbie shell --seed 2019125
(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)))