\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 -2.9388713619935654 \cdot 10^{-273}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}, -b\right)}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -4, 0\right)}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r1628359 = b;
double r1628360 = -r1628359;
double r1628361 = r1628359 * r1628359;
double r1628362 = 4.0;
double r1628363 = a;
double r1628364 = c;
double r1628365 = r1628363 * r1628364;
double r1628366 = r1628362 * r1628365;
double r1628367 = r1628361 - r1628366;
double r1628368 = sqrt(r1628367);
double r1628369 = r1628360 + r1628368;
double r1628370 = 2.0;
double r1628371 = r1628370 * r1628363;
double r1628372 = r1628369 / r1628371;
return r1628372;
}
double f(double a, double b, double c) {
double r1628373 = b;
double r1628374 = -2.9388713619935654e-273;
bool r1628375 = r1628373 <= r1628374;
double r1628376 = a;
double r1628377 = c;
double r1628378 = r1628376 * r1628377;
double r1628379 = -4.0;
double r1628380 = r1628373 * r1628373;
double r1628381 = fma(r1628378, r1628379, r1628380);
double r1628382 = sqrt(r1628381);
double r1628383 = sqrt(r1628382);
double r1628384 = -r1628373;
double r1628385 = fma(r1628383, r1628383, r1628384);
double r1628386 = r1628385 / r1628376;
double r1628387 = 2.0;
double r1628388 = r1628386 / r1628387;
double r1628389 = 0.0;
double r1628390 = fma(r1628378, r1628379, r1628389);
double r1628391 = r1628373 + r1628382;
double r1628392 = r1628390 / r1628391;
double r1628393 = r1628392 / r1628376;
double r1628394 = r1628393 / r1628387;
double r1628395 = r1628375 ? r1628388 : r1628394;
return r1628395;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 32.8 |
|---|---|
| Target | 20.1 |
| Herbie | 21.8 |
if b < -2.9388713619935654e-273Initial program 20.9
Simplified20.9
rmApplied add-sqr-sqrt20.9
Applied sqrt-prod21.1
Applied fma-neg21.0
if -2.9388713619935654e-273 < b Initial program 42.3
Simplified42.3
rmApplied flip--42.4
Simplified22.4
Final simplification21.8
herbie shell --seed 2019152 +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)))