\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.263941314600607 \cdot 10^{+152}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le -4.687918346756617 \cdot 10^{-254}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)} - b}{2}}{a}\\
\mathbf{elif}\;b \le 3.463606471108268 \cdot 10^{+121}:\\
\;\;\;\;\frac{\frac{c}{\frac{-1}{2}}}{\sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot -4\right) \cdot c\right)\right)} + b}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r13501546 = b;
double r13501547 = -r13501546;
double r13501548 = r13501546 * r13501546;
double r13501549 = 4.0;
double r13501550 = a;
double r13501551 = c;
double r13501552 = r13501550 * r13501551;
double r13501553 = r13501549 * r13501552;
double r13501554 = r13501548 - r13501553;
double r13501555 = sqrt(r13501554);
double r13501556 = r13501547 + r13501555;
double r13501557 = 2.0;
double r13501558 = r13501557 * r13501550;
double r13501559 = r13501556 / r13501558;
return r13501559;
}
double f(double a, double b, double c) {
double r13501560 = b;
double r13501561 = -3.263941314600607e+152;
bool r13501562 = r13501560 <= r13501561;
double r13501563 = c;
double r13501564 = r13501563 / r13501560;
double r13501565 = a;
double r13501566 = r13501560 / r13501565;
double r13501567 = r13501564 - r13501566;
double r13501568 = -4.687918346756617e-254;
bool r13501569 = r13501560 <= r13501568;
double r13501570 = r13501563 * r13501565;
double r13501571 = -4.0;
double r13501572 = r13501560 * r13501560;
double r13501573 = fma(r13501570, r13501571, r13501572);
double r13501574 = sqrt(r13501573);
double r13501575 = r13501574 - r13501560;
double r13501576 = 2.0;
double r13501577 = r13501575 / r13501576;
double r13501578 = r13501577 / r13501565;
double r13501579 = 3.463606471108268e+121;
bool r13501580 = r13501560 <= r13501579;
double r13501581 = -0.5;
double r13501582 = r13501563 / r13501581;
double r13501583 = r13501565 * r13501571;
double r13501584 = r13501583 * r13501563;
double r13501585 = fma(r13501560, r13501560, r13501584);
double r13501586 = sqrt(r13501585);
double r13501587 = r13501586 + r13501560;
double r13501588 = r13501582 / r13501587;
double r13501589 = -r13501564;
double r13501590 = r13501580 ? r13501588 : r13501589;
double r13501591 = r13501569 ? r13501578 : r13501590;
double r13501592 = r13501562 ? r13501567 : r13501591;
return r13501592;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.3 |
| Herbie | 6.4 |
if b < -3.263941314600607e+152Initial program 60.1
Simplified60.1
Taylor expanded around -inf 2.3
if -3.263941314600607e+152 < b < -4.687918346756617e-254Initial program 7.8
Simplified7.8
Taylor expanded around 0 7.8
Simplified7.8
if -4.687918346756617e-254 < b < 3.463606471108268e+121Initial program 31.6
Simplified31.6
rmApplied flip--31.8
Simplified15.5
Simplified15.5
rmApplied *-un-lft-identity15.5
Applied *-un-lft-identity15.5
Applied *-un-lft-identity15.5
Applied times-frac15.5
Applied times-frac15.5
Simplified15.5
Simplified8.7
if 3.463606471108268e+121 < b Initial program 59.8
Simplified59.8
Taylor expanded around inf 2.3
Simplified2.3
Final simplification6.4
herbie shell --seed 2019128 +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)))