\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\end{array}\begin{array}{l}
\mathbf{if}\;b \le -2.025649824816678368861606895534923213042 \cdot 10^{153}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\mathsf{fma}\left(\sqrt{b}, -\sqrt{b}, \left(-\sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\right) \cdot \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\right)}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}\\
\mathbf{elif}\;b \le -7.861981762083132668510050355778103370506 \cdot 10^{-283}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \left(b - \frac{a \cdot c}{b} \cdot 2\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{a \cdot 2}\\
\end{array}\\
\mathbf{elif}\;b \le 3.145245930173682791630322722650846320978 \cdot 10^{50}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-2, b, \frac{2}{\frac{b}{a \cdot c}}\right)}{a \cdot 2}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\mathsf{fma}\left(2, \frac{c}{\frac{b}{a}}, b \cdot -2\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{a \cdot 2}\\
\end{array}double f(double a, double b, double c) {
double r856593 = b;
double r856594 = 0.0;
bool r856595 = r856593 >= r856594;
double r856596 = 2.0;
double r856597 = c;
double r856598 = r856596 * r856597;
double r856599 = -r856593;
double r856600 = r856593 * r856593;
double r856601 = 4.0;
double r856602 = a;
double r856603 = r856601 * r856602;
double r856604 = r856603 * r856597;
double r856605 = r856600 - r856604;
double r856606 = sqrt(r856605);
double r856607 = r856599 - r856606;
double r856608 = r856598 / r856607;
double r856609 = r856599 + r856606;
double r856610 = r856596 * r856602;
double r856611 = r856609 / r856610;
double r856612 = r856595 ? r856608 : r856611;
return r856612;
}
double f(double a, double b, double c) {
double r856613 = b;
double r856614 = -2.0256498248166784e+153;
bool r856615 = r856613 <= r856614;
double r856616 = 0.0;
bool r856617 = r856613 >= r856616;
double r856618 = 2.0;
double r856619 = c;
double r856620 = r856618 * r856619;
double r856621 = sqrt(r856613);
double r856622 = -r856621;
double r856623 = r856613 * r856613;
double r856624 = 4.0;
double r856625 = a;
double r856626 = r856624 * r856625;
double r856627 = r856626 * r856619;
double r856628 = r856623 - r856627;
double r856629 = sqrt(r856628);
double r856630 = sqrt(r856629);
double r856631 = -r856630;
double r856632 = r856631 * r856630;
double r856633 = fma(r856621, r856622, r856632);
double r856634 = r856620 / r856633;
double r856635 = 1.0;
double r856636 = r856619 / r856613;
double r856637 = r856613 / r856625;
double r856638 = r856636 - r856637;
double r856639 = r856635 * r856638;
double r856640 = r856617 ? r856634 : r856639;
double r856641 = -7.861981762083133e-283;
bool r856642 = r856613 <= r856641;
double r856643 = -r856613;
double r856644 = r856625 * r856619;
double r856645 = r856644 / r856613;
double r856646 = r856645 * r856618;
double r856647 = r856613 - r856646;
double r856648 = r856643 - r856647;
double r856649 = r856620 / r856648;
double r856650 = r856643 + r856629;
double r856651 = r856625 * r856618;
double r856652 = r856650 / r856651;
double r856653 = r856617 ? r856649 : r856652;
double r856654 = 3.1452459301736828e+50;
bool r856655 = r856613 <= r856654;
double r856656 = r856643 - r856629;
double r856657 = r856620 / r856656;
double r856658 = -2.0;
double r856659 = r856613 / r856644;
double r856660 = r856618 / r856659;
double r856661 = fma(r856658, r856613, r856660);
double r856662 = r856661 / r856651;
double r856663 = r856617 ? r856657 : r856662;
double r856664 = r856619 / r856637;
double r856665 = r856613 * r856658;
double r856666 = fma(r856618, r856664, r856665);
double r856667 = r856620 / r856666;
double r856668 = r856617 ? r856667 : r856652;
double r856669 = r856655 ? r856663 : r856668;
double r856670 = r856642 ? r856653 : r856669;
double r856671 = r856615 ? r856640 : r856670;
return r856671;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -2.0256498248166784e+153Initial program 63.6
rmApplied add-sqr-sqrt63.6
Applied sqrt-prod63.6
Applied add-sqr-sqrt63.6
Applied distribute-rgt-neg-in63.6
Applied prod-diff63.6
Simplified63.6
Taylor expanded around -inf 10.4
Simplified2.1
Taylor expanded around 0 2.0
Simplified2.0
if -2.0256498248166784e+153 < b < -7.861981762083133e-283Initial program 8.1
Taylor expanded around inf 8.1
if -7.861981762083133e-283 < b < 3.1452459301736828e+50Initial program 9.5
rmApplied add-sqr-sqrt9.5
Applied sqrt-prod9.5
Taylor expanded around -inf 12.3
Simplified12.3
if 3.1452459301736828e+50 < b Initial program 26.2
Taylor expanded around inf 7.7
Simplified4.3
Final simplification7.6
herbie shell --seed 2019179 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 2"
(if (>= b 0.0) (/ (* 2.0 c) (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c))))) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a))))