double f(double a, double b, double c) {
double r12030641 = b;
double r12030642 = -r12030641;
double r12030643 = r12030641 * r12030641;
double r12030644 = 4.0;
double r12030645 = a;
double r12030646 = r12030644 * r12030645;
double r12030647 = c;
double r12030648 = r12030646 * r12030647;
double r12030649 = r12030643 - r12030648;
double r12030650 = sqrt(r12030649);
double r12030651 = r12030642 + r12030650;
double r12030652 = 2.0;
double r12030653 = r12030652 * r12030645;
double r12030654 = r12030651 / r12030653;
return r12030654;
}
double f(double a, double b, double c) {
double r12030655 = 2.0;
double r12030656 = c;
double r12030657 = r12030655 * r12030656;
double r12030658 = b;
double r12030659 = sqrt(r12030658);
double r12030660 = -r12030659;
double r12030661 = a;
double r12030662 = -4.0;
double r12030663 = r12030661 * r12030662;
double r12030664 = r12030658 * r12030658;
double r12030665 = fma(r12030656, r12030663, r12030664);
double r12030666 = sqrt(r12030665);
double r12030667 = -r12030666;
double r12030668 = fma(r12030660, r12030659, r12030667);
double r12030669 = r12030657 / r12030668;
return r12030669;
}
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{2 \cdot c}{(\left(-\sqrt{b}\right) \cdot \left(\sqrt{b}\right) + \left(-\sqrt{(c \cdot \left(a \cdot -4\right) + \left(b \cdot b\right))_*}\right))_*}


Bits error versus a



Bits error versus b



Bits error versus c
Initial program 43.9
rmApplied flip-+43.9
Applied associate-/l/43.9
Simplified0.4
rmApplied associate-/r*0.2
Simplified0.2
Taylor expanded around 0 0.2
rmApplied add-sqr-sqrt0.3
Applied distribute-lft-neg-in0.3
Applied fma-neg0.2
Final simplification0.2
herbie shell --seed 2019101 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, medium range"
:pre (and (< 1.1102230246251565e-16 a 9007199254740992.0) (< 1.1102230246251565e-16 b 9007199254740992.0) (< 1.1102230246251565e-16 c 9007199254740992.0))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))