\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.39564812417811377078958072800119881067 \cdot 10^{-52}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 2.369507469709798282050760971696230368519 \cdot 10^{103}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(\left(-4\right) \cdot a, c, b \cdot b\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r58107 = b;
double r58108 = -r58107;
double r58109 = r58107 * r58107;
double r58110 = 4.0;
double r58111 = a;
double r58112 = c;
double r58113 = r58111 * r58112;
double r58114 = r58110 * r58113;
double r58115 = r58109 - r58114;
double r58116 = sqrt(r58115);
double r58117 = r58108 - r58116;
double r58118 = 2.0;
double r58119 = r58118 * r58111;
double r58120 = r58117 / r58119;
return r58120;
}
double f(double a, double b, double c) {
double r58121 = b;
double r58122 = -4.395648124178114e-52;
bool r58123 = r58121 <= r58122;
double r58124 = -1.0;
double r58125 = c;
double r58126 = r58125 / r58121;
double r58127 = r58124 * r58126;
double r58128 = 2.3695074697097983e+103;
bool r58129 = r58121 <= r58128;
double r58130 = -r58121;
double r58131 = 4.0;
double r58132 = -r58131;
double r58133 = a;
double r58134 = r58132 * r58133;
double r58135 = r58121 * r58121;
double r58136 = fma(r58134, r58125, r58135);
double r58137 = sqrt(r58136);
double r58138 = r58130 - r58137;
double r58139 = 2.0;
double r58140 = r58139 * r58133;
double r58141 = r58138 / r58140;
double r58142 = r58121 / r58133;
double r58143 = r58124 * r58142;
double r58144 = r58129 ? r58141 : r58143;
double r58145 = r58123 ? r58127 : r58144;
return r58145;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.1 |
|---|---|
| Target | 20.7 |
| Herbie | 9.9 |
if b < -4.395648124178114e-52Initial program 53.9
Taylor expanded around -inf 7.7
if -4.395648124178114e-52 < b < 2.3695074697097983e+103Initial program 13.8
Taylor expanded around 0 13.8
Simplified13.8
if 2.3695074697097983e+103 < b Initial program 47.8
Taylor expanded around 0 47.8
Simplified47.8
rmApplied clear-num47.9
Taylor expanded around 0 3.3
Final simplification9.9
herbie shell --seed 2019212 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:precision binary64
:herbie-target
(if (< b 0.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)))