\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{4 \cdot \left(a \cdot c\right)}{\left(2 \cdot \left(\left(-b\right) - \sqrt{\frac{{b}^{6} - {\left(\left(4 \cdot a\right) \cdot c\right)}^{3}}{\mathsf{fma}\left(\left(c \cdot 4\right) \cdot a, \mathsf{fma}\left(b, b, 4 \cdot \left(a \cdot c\right)\right), {b}^{4}\right)}}\right)\right) \cdot a}double f(double a, double b, double c) {
double r48086 = b;
double r48087 = -r48086;
double r48088 = r48086 * r48086;
double r48089 = 4.0;
double r48090 = a;
double r48091 = r48089 * r48090;
double r48092 = c;
double r48093 = r48091 * r48092;
double r48094 = r48088 - r48093;
double r48095 = sqrt(r48094);
double r48096 = r48087 + r48095;
double r48097 = 2.0;
double r48098 = r48097 * r48090;
double r48099 = r48096 / r48098;
return r48099;
}
double f(double a, double b, double c) {
double r48100 = 4.0;
double r48101 = a;
double r48102 = c;
double r48103 = r48101 * r48102;
double r48104 = r48100 * r48103;
double r48105 = 2.0;
double r48106 = b;
double r48107 = -r48106;
double r48108 = 6.0;
double r48109 = pow(r48106, r48108);
double r48110 = r48100 * r48101;
double r48111 = r48110 * r48102;
double r48112 = 3.0;
double r48113 = pow(r48111, r48112);
double r48114 = r48109 - r48113;
double r48115 = r48102 * r48100;
double r48116 = r48115 * r48101;
double r48117 = fma(r48106, r48106, r48104);
double r48118 = 4.0;
double r48119 = pow(r48106, r48118);
double r48120 = fma(r48116, r48117, r48119);
double r48121 = r48114 / r48120;
double r48122 = sqrt(r48121);
double r48123 = r48107 - r48122;
double r48124 = r48105 * r48123;
double r48125 = r48124 * r48101;
double r48126 = r48104 / r48125;
return r48126;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 44.0
rmApplied flip-+44.0
Simplified0.4
rmApplied flip3--0.4
Simplified0.4
Simplified0.4
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2019303 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e15) (< 1.11022e-16 b 9.0072e15) (< 1.11022e-16 c 9.0072e15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))