\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.3390906992477082 \cdot 10^{+154}:\\
\;\;\;\;\frac{\frac{-4 \cdot c}{2 \cdot \frac{a \cdot c}{b}}}{2}\\
\mathbf{elif}\;b \le -8.671664006593932 \cdot 10^{-208}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(-4 \cdot a, c, b \cdot b\right)} - b}{a}}{2}\\
\mathbf{elif}\;b \le 8.123773458674236 \cdot 10^{+149}:\\
\;\;\;\;\frac{\frac{-4 \cdot c}{\sqrt{\mathsf{fma}\left(a, \frac{c}{\frac{-1}{4}}, b \cdot b\right)} + b}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{-4 \cdot c}{\left(b - \frac{a \cdot c}{b}\right) \cdot 2}}{2}\\
\end{array}double f(double a, double b, double c) {
double r2941502 = b;
double r2941503 = -r2941502;
double r2941504 = r2941502 * r2941502;
double r2941505 = 4.0;
double r2941506 = a;
double r2941507 = c;
double r2941508 = r2941506 * r2941507;
double r2941509 = r2941505 * r2941508;
double r2941510 = r2941504 - r2941509;
double r2941511 = sqrt(r2941510);
double r2941512 = r2941503 + r2941511;
double r2941513 = 2.0;
double r2941514 = r2941513 * r2941506;
double r2941515 = r2941512 / r2941514;
return r2941515;
}
double f(double a, double b, double c) {
double r2941516 = b;
double r2941517 = -1.3390906992477082e+154;
bool r2941518 = r2941516 <= r2941517;
double r2941519 = -4.0;
double r2941520 = c;
double r2941521 = r2941519 * r2941520;
double r2941522 = 2.0;
double r2941523 = a;
double r2941524 = r2941523 * r2941520;
double r2941525 = r2941524 / r2941516;
double r2941526 = r2941522 * r2941525;
double r2941527 = r2941521 / r2941526;
double r2941528 = r2941527 / r2941522;
double r2941529 = -8.671664006593932e-208;
bool r2941530 = r2941516 <= r2941529;
double r2941531 = r2941519 * r2941523;
double r2941532 = r2941516 * r2941516;
double r2941533 = fma(r2941531, r2941520, r2941532);
double r2941534 = sqrt(r2941533);
double r2941535 = r2941534 - r2941516;
double r2941536 = r2941535 / r2941523;
double r2941537 = r2941536 / r2941522;
double r2941538 = 8.123773458674236e+149;
bool r2941539 = r2941516 <= r2941538;
double r2941540 = -0.25;
double r2941541 = r2941520 / r2941540;
double r2941542 = fma(r2941523, r2941541, r2941532);
double r2941543 = sqrt(r2941542);
double r2941544 = r2941543 + r2941516;
double r2941545 = r2941521 / r2941544;
double r2941546 = r2941545 / r2941522;
double r2941547 = r2941516 - r2941525;
double r2941548 = r2941547 * r2941522;
double r2941549 = r2941521 / r2941548;
double r2941550 = r2941549 / r2941522;
double r2941551 = r2941539 ? r2941546 : r2941550;
double r2941552 = r2941530 ? r2941537 : r2941551;
double r2941553 = r2941518 ? r2941528 : r2941552;
return r2941553;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.2 |
|---|---|
| Target | 20.6 |
| Herbie | 9.8 |
if b < -1.3390906992477082e+154Initial program 60.9
Simplified60.9
rmApplied flip--62.2
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.5
Taylor expanded around 0 62.4
Taylor expanded around -inf 23.4
if -1.3390906992477082e+154 < b < -8.671664006593932e-208Initial program 6.6
Simplified6.6
rmApplied *-un-lft-identity6.6
Applied associate-/r*6.6
Simplified6.6
if -8.671664006593932e-208 < b < 8.123773458674236e+149Initial program 32.1
Simplified32.1
rmApplied flip--32.3
Simplified16.5
rmApplied *-un-lft-identity16.5
Applied *-un-lft-identity16.5
Applied *-un-lft-identity16.5
Applied times-frac16.5
Applied times-frac16.5
Simplified16.5
Simplified14.8
Taylor expanded around 0 9.7
Taylor expanded around 0 9.7
Simplified9.7
if 8.123773458674236e+149 < b Initial program 62.3
Simplified62.3
rmApplied flip--62.3
Simplified38.2
rmApplied *-un-lft-identity38.2
Applied *-un-lft-identity38.2
Applied *-un-lft-identity38.2
Applied times-frac38.2
Applied times-frac38.2
Simplified38.2
Simplified38.1
Taylor expanded around 0 37.9
Taylor expanded around inf 6.7
Simplified6.7
Final simplification9.8
herbie shell --seed 2019162 +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)))