double f(double a, double b, double c) {
double r5418340 = b;
double r5418341 = -r5418340;
double r5418342 = r5418340 * r5418340;
double r5418343 = 4.0;
double r5418344 = a;
double r5418345 = c;
double r5418346 = r5418344 * r5418345;
double r5418347 = r5418343 * r5418346;
double r5418348 = r5418342 - r5418347;
double r5418349 = sqrt(r5418348);
double r5418350 = r5418341 + r5418349;
double r5418351 = 2.0;
double r5418352 = r5418351 * r5418344;
double r5418353 = r5418350 / r5418352;
return r5418353;
}
double f(double a, double b, double c) {
double r5418354 = b;
double r5418355 = -8.78453392716348e+64;
bool r5418356 = r5418354 <= r5418355;
double r5418357 = c;
double r5418358 = r5418357 / r5418354;
double r5418359 = a;
double r5418360 = r5418354 / r5418359;
double r5418361 = r5418358 - r5418360;
double r5418362 = 7.643168247577731e-56;
bool r5418363 = r5418354 <= r5418362;
double r5418364 = 1.0;
double r5418365 = -4.0;
double r5418366 = r5418357 * r5418365;
double r5418367 = r5418354 * r5418354;
double r5418368 = fma(r5418366, r5418359, r5418367);
double r5418369 = sqrt(r5418368);
double r5418370 = r5418369 - r5418354;
double r5418371 = 0.5;
double r5418372 = r5418370 * r5418371;
double r5418373 = r5418359 / r5418372;
double r5418374 = r5418364 / r5418373;
double r5418375 = -r5418358;
double r5418376 = r5418363 ? r5418374 : r5418375;
double r5418377 = r5418356 ? r5418361 : r5418376;
return r5418377;
}
\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 -8.78453392716348 \cdot 10^{+64}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 7.643168247577731 \cdot 10^{-56}:\\
\;\;\;\;\frac{1}{\frac{a}{\left(\sqrt{(\left(c \cdot -4\right) \cdot a + \left(b \cdot b\right))_*} - b\right) \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.6 |
if b < -8.78453392716348e+64Initial program 37.7
Simplified37.7
Taylor expanded around -inf 5.2
if -8.78453392716348e+64 < b < 7.643168247577731e-56Initial program 14.7
Simplified14.6
rmApplied *-un-lft-identity14.6
Applied div-inv14.6
Applied times-frac14.7
Simplified14.7
Simplified14.7
rmApplied associate-*r/14.6
rmApplied clear-num14.7
if 7.643168247577731e-56 < b Initial program 53.4
Simplified53.4
Taylor expanded around inf 8.5
Simplified8.5
Final simplification10.6
herbie shell --seed 2019101 +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)))