\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 -1.3388522088846754 \cdot 10^{+154}:\\
\;\;\;\;\frac{\frac{c}{\frac{a \cdot c}{b} \cdot 2} \cdot \frac{-4 \cdot a}{a}}{2}\\
\mathbf{elif}\;b \le 8.65932037201788 \cdot 10^{-309}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \left(\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b\right)}{2}\\
\mathbf{elif}\;b \le 3.421102533893443 \cdot 10^{+145}:\\
\;\;\;\;\frac{\frac{c}{\sqrt{\mathsf{fma}\left(c, -4 \cdot a, b \cdot b\right)} + b} \cdot \frac{-4 \cdot a}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(c \cdot \frac{\frac{1}{2}}{b}\right) \cdot \frac{-4 \cdot a}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r3107427 = b;
double r3107428 = -r3107427;
double r3107429 = r3107427 * r3107427;
double r3107430 = 4.0;
double r3107431 = a;
double r3107432 = c;
double r3107433 = r3107431 * r3107432;
double r3107434 = r3107430 * r3107433;
double r3107435 = r3107429 - r3107434;
double r3107436 = sqrt(r3107435);
double r3107437 = r3107428 + r3107436;
double r3107438 = 2.0;
double r3107439 = r3107438 * r3107431;
double r3107440 = r3107437 / r3107439;
return r3107440;
}
double f(double a, double b, double c) {
double r3107441 = b;
double r3107442 = -1.3388522088846754e+154;
bool r3107443 = r3107441 <= r3107442;
double r3107444 = c;
double r3107445 = a;
double r3107446 = r3107445 * r3107444;
double r3107447 = r3107446 / r3107441;
double r3107448 = 2.0;
double r3107449 = r3107447 * r3107448;
double r3107450 = r3107444 / r3107449;
double r3107451 = -4.0;
double r3107452 = r3107451 * r3107445;
double r3107453 = r3107452 / r3107445;
double r3107454 = r3107450 * r3107453;
double r3107455 = r3107454 / r3107448;
double r3107456 = 8.65932037201788e-309;
bool r3107457 = r3107441 <= r3107456;
double r3107458 = 1.0;
double r3107459 = r3107458 / r3107445;
double r3107460 = r3107441 * r3107441;
double r3107461 = fma(r3107446, r3107451, r3107460);
double r3107462 = sqrt(r3107461);
double r3107463 = r3107462 - r3107441;
double r3107464 = r3107459 * r3107463;
double r3107465 = r3107464 / r3107448;
double r3107466 = 3.421102533893443e+145;
bool r3107467 = r3107441 <= r3107466;
double r3107468 = fma(r3107444, r3107452, r3107460);
double r3107469 = sqrt(r3107468);
double r3107470 = r3107469 + r3107441;
double r3107471 = r3107444 / r3107470;
double r3107472 = r3107471 * r3107453;
double r3107473 = r3107472 / r3107448;
double r3107474 = 0.5;
double r3107475 = r3107474 / r3107441;
double r3107476 = r3107444 * r3107475;
double r3107477 = r3107476 * r3107453;
double r3107478 = r3107477 / r3107448;
double r3107479 = r3107467 ? r3107473 : r3107478;
double r3107480 = r3107457 ? r3107465 : r3107479;
double r3107481 = r3107443 ? r3107455 : r3107480;
return r3107481;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.0 |
|---|---|
| Target | 20.7 |
| Herbie | 8.4 |
if b < -1.3388522088846754e+154Initial program 61.0
Simplified61.0
rmApplied flip--62.3
Simplified62.5
rmApplied *-un-lft-identity62.5
Applied *-un-lft-identity62.5
Applied *-un-lft-identity62.5
Applied times-frac62.5
Applied times-frac62.5
Simplified62.5
Simplified62.4
Taylor expanded around -inf 21.4
if -1.3388522088846754e+154 < b < 8.65932037201788e-309Initial program 8.1
Simplified8.1
rmApplied div-inv8.3
if 8.65932037201788e-309 < b < 3.421102533893443e+145Initial program 35.1
Simplified35.1
rmApplied flip--35.2
Simplified15.7
rmApplied *-un-lft-identity15.7
Applied *-un-lft-identity15.7
Applied *-un-lft-identity15.7
Applied times-frac15.7
Applied times-frac15.7
Simplified15.7
Simplified8.3
if 3.421102533893443e+145 < b Initial program 61.9
Simplified61.9
rmApplied flip--61.9
Simplified36.8
rmApplied *-un-lft-identity36.8
Applied *-un-lft-identity36.8
Applied *-un-lft-identity36.8
Applied times-frac36.8
Applied times-frac36.8
Simplified36.8
Simplified36.3
rmApplied div-inv36.3
Taylor expanded around inf 1.5
Final simplification8.4
herbie shell --seed 2019168 +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)))