\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.157094219357017 \cdot 10^{+135}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 7.191626946559579 \cdot 10^{-55}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)} - b}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-c}{b}\\
\end{array}double f(double a, double b, double c) {
double r3628281 = b;
double r3628282 = -r3628281;
double r3628283 = r3628281 * r3628281;
double r3628284 = 4.0;
double r3628285 = a;
double r3628286 = c;
double r3628287 = r3628285 * r3628286;
double r3628288 = r3628284 * r3628287;
double r3628289 = r3628283 - r3628288;
double r3628290 = sqrt(r3628289);
double r3628291 = r3628282 + r3628290;
double r3628292 = 2.0;
double r3628293 = r3628292 * r3628285;
double r3628294 = r3628291 / r3628293;
return r3628294;
}
double f(double a, double b, double c) {
double r3628295 = b;
double r3628296 = -3.157094219357017e+135;
bool r3628297 = r3628295 <= r3628296;
double r3628298 = c;
double r3628299 = r3628298 / r3628295;
double r3628300 = a;
double r3628301 = r3628295 / r3628300;
double r3628302 = r3628299 - r3628301;
double r3628303 = 7.191626946559579e-55;
bool r3628304 = r3628295 <= r3628303;
double r3628305 = r3628298 * r3628300;
double r3628306 = -4.0;
double r3628307 = r3628295 * r3628295;
double r3628308 = fma(r3628305, r3628306, r3628307);
double r3628309 = sqrt(r3628308);
double r3628310 = r3628309 - r3628295;
double r3628311 = 2.0;
double r3628312 = r3628310 / r3628311;
double r3628313 = r3628312 / r3628300;
double r3628314 = -r3628298;
double r3628315 = r3628314 / r3628295;
double r3628316 = r3628304 ? r3628313 : r3628315;
double r3628317 = r3628297 ? r3628302 : r3628316;
return r3628317;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.9 |
|---|---|
| Target | 20.9 |
| Herbie | 10.2 |
if b < -3.157094219357017e+135Initial program 54.4
Simplified54.4
Taylor expanded around -inf 2.8
if -3.157094219357017e+135 < b < 7.191626946559579e-55Initial program 13.6
Simplified13.6
Taylor expanded around inf 13.6
Simplified13.6
if 7.191626946559579e-55 < b Initial program 53.4
Simplified53.4
Taylor expanded around inf 8.1
Simplified8.1
Final simplification10.2
herbie shell --seed 2019120 +o rules:numerics
(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)))