double f(double a, double b, double c) {
double r10636008 = b;
double r10636009 = -r10636008;
double r10636010 = r10636008 * r10636008;
double r10636011 = 4.0;
double r10636012 = a;
double r10636013 = c;
double r10636014 = r10636012 * r10636013;
double r10636015 = r10636011 * r10636014;
double r10636016 = r10636010 - r10636015;
double r10636017 = sqrt(r10636016);
double r10636018 = r10636009 - r10636017;
double r10636019 = 2.0;
double r10636020 = r10636019 * r10636012;
double r10636021 = r10636018 / r10636020;
return r10636021;
}
double f(double a, double b, double c) {
double r10636022 = b;
double r10636023 = -9.238052366259206e-38;
bool r10636024 = r10636022 <= r10636023;
double r10636025 = c;
double r10636026 = r10636025 / r10636022;
double r10636027 = -r10636026;
double r10636028 = 2.7654658503846575e+109;
bool r10636029 = r10636022 <= r10636028;
double r10636030 = -0.5;
double r10636031 = a;
double r10636032 = r10636030 / r10636031;
double r10636033 = -4.0;
double r10636034 = r10636025 * r10636033;
double r10636035 = r10636022 * r10636022;
double r10636036 = fma(r10636031, r10636034, r10636035);
double r10636037 = sqrt(r10636036);
double r10636038 = r10636037 + r10636022;
double r10636039 = r10636032 * r10636038;
double r10636040 = r10636022 / r10636031;
double r10636041 = -r10636040;
double r10636042 = r10636029 ? r10636039 : r10636041;
double r10636043 = r10636024 ? r10636027 : r10636042;
return r10636043;
}
\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 -9.238052366259206 \cdot 10^{-38}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 2.7654658503846575 \cdot 10^{+109}:\\
\;\;\;\;\frac{\frac{-1}{2}}{a} \cdot \left(\sqrt{(a \cdot \left(c \cdot -4\right) + \left(b \cdot b\right))_*} + b\right)\\
\mathbf{else}:\\
\;\;\;\;-\frac{b}{a}\\
\end{array}



Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.5 |
|---|---|
| Target | 20.8 |
| Herbie | 10.3 |
if b < -9.238052366259206e-38Initial program 53.5
Simplified53.5
Taylor expanded around -inf 7.8
Simplified7.8
if -9.238052366259206e-38 < b < 2.7654658503846575e+109Initial program 14.2
Simplified14.2
rmApplied *-un-lft-identity14.2
Applied div-inv14.2
Applied times-frac14.3
Simplified14.4
Simplified14.4
if 2.7654658503846575e+109 < b Initial program 47.4
Simplified47.4
rmApplied clear-num47.5
Taylor expanded around 0 3.4
Simplified3.4
Final simplification10.3
herbie shell --seed 2019102 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))