\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\left(\frac{c}{\left(-b\right) - \sqrt{\sqrt[3]{{\left(\mathsf{fma}\left(b, b, -\left(4 \cdot a\right) \cdot c\right)\right)}^{3}}}} \cdot 4\right) \cdot \frac{1}{2}double f(double a, double b, double c) {
double r46088 = b;
double r46089 = -r46088;
double r46090 = r46088 * r46088;
double r46091 = 4.0;
double r46092 = a;
double r46093 = r46091 * r46092;
double r46094 = c;
double r46095 = r46093 * r46094;
double r46096 = r46090 - r46095;
double r46097 = sqrt(r46096);
double r46098 = r46089 + r46097;
double r46099 = 2.0;
double r46100 = r46099 * r46092;
double r46101 = r46098 / r46100;
return r46101;
}
double f(double a, double b, double c) {
double r46102 = c;
double r46103 = b;
double r46104 = -r46103;
double r46105 = 4.0;
double r46106 = a;
double r46107 = r46105 * r46106;
double r46108 = r46107 * r46102;
double r46109 = -r46108;
double r46110 = fma(r46103, r46103, r46109);
double r46111 = 3.0;
double r46112 = pow(r46110, r46111);
double r46113 = cbrt(r46112);
double r46114 = sqrt(r46113);
double r46115 = r46104 - r46114;
double r46116 = r46102 / r46115;
double r46117 = r46116 * r46105;
double r46118 = 1.0;
double r46119 = 2.0;
double r46120 = r46118 / r46119;
double r46121 = r46117 * r46120;
return r46121;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 28.1
rmApplied flip-+28.1
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.5
rmApplied times-frac0.3
Simplified0.3
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019235 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
:pre (and (< 1.05367121277235087e-8 a 94906265.6242515594) (< 1.05367121277235087e-8 b 94906265.6242515594) (< 1.05367121277235087e-8 c 94906265.6242515594))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))