double f(double a, double b, double c) {
double r4942988 = b;
double r4942989 = -r4942988;
double r4942990 = r4942988 * r4942988;
double r4942991 = 4.0;
double r4942992 = a;
double r4942993 = c;
double r4942994 = r4942992 * r4942993;
double r4942995 = r4942991 * r4942994;
double r4942996 = r4942990 - r4942995;
double r4942997 = sqrt(r4942996);
double r4942998 = r4942989 + r4942997;
double r4942999 = 2.0;
double r4943000 = r4942999 * r4942992;
double r4943001 = r4942998 / r4943000;
return r4943001;
}
double f(double a, double b, double c) {
double r4943002 = b;
double r4943003 = -3.4350120867177856e+86;
bool r4943004 = r4943002 <= r4943003;
double r4943005 = c;
double r4943006 = r4943005 / r4943002;
double r4943007 = a;
double r4943008 = r4943002 / r4943007;
double r4943009 = r4943006 - r4943008;
double r4943010 = 9.022485597500134e-56;
bool r4943011 = r4943002 <= r4943010;
double r4943012 = r4943002 * r4943002;
double r4943013 = 4.0;
double r4943014 = r4943013 * r4943007;
double r4943015 = r4943005 * r4943014;
double r4943016 = r4943012 - r4943015;
double r4943017 = sqrt(r4943016);
double r4943018 = r4943017 - r4943002;
double r4943019 = r4943018 / r4943007;
double r4943020 = 0.5;
double r4943021 = r4943019 * r4943020;
double r4943022 = -r4943006;
double r4943023 = r4943011 ? r4943021 : r4943022;
double r4943024 = r4943004 ? r4943009 : r4943023;
return r4943024;
}
\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 -3.4350120867177856 \cdot 10^{+86}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 9.022485597500134 \cdot 10^{-56}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)} - b}{a} \cdot \frac{1}{2}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}



Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.4 |
|---|---|
| Target | 20.6 |
| Herbie | 10.5 |
if b < -3.4350120867177856e+86Initial program 41.4
Simplified41.4
Taylor expanded around -inf 4.4
if -3.4350120867177856e+86 < b < 9.022485597500134e-56Initial program 14.3
Simplified14.3
rmApplied *-un-lft-identity14.3
Applied associate-/l*14.4
rmApplied *-un-lft-identity14.4
Applied *-un-lft-identity14.4
Applied distribute-lft-out--14.4
Applied times-frac14.4
Applied add-cube-cbrt14.4
Applied times-frac14.4
Simplified14.4
Simplified14.3
if 9.022485597500134e-56 < b Initial program 53.4
Simplified53.4
Taylor expanded around inf 8.5
Simplified8.5
Final simplification10.5
herbie shell --seed 2019101
(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)))