\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 -5.1113133556666892392847386011681009173 \cdot 10^{-81}:\\
\;\;\;\;-\frac{c \cdot \sqrt[3]{1}}{b} \cdot \left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right)\\
\mathbf{elif}\;b \le 1.662466508012246493587212065137537026696 \cdot 10^{84}:\\
\;\;\;\;\frac{-1}{2 \cdot a} \cdot \left(b + \sqrt{\mathsf{fma}\left(a \cdot \left(-c\right), 4, b \cdot b\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(-1\right) \cdot \left(\frac{b}{a} - \frac{c}{b}\right)\\
\end{array}double f(double a, double b, double c) {
double r50144 = b;
double r50145 = -r50144;
double r50146 = r50144 * r50144;
double r50147 = 4.0;
double r50148 = a;
double r50149 = c;
double r50150 = r50148 * r50149;
double r50151 = r50147 * r50150;
double r50152 = r50146 - r50151;
double r50153 = sqrt(r50152);
double r50154 = r50145 - r50153;
double r50155 = 2.0;
double r50156 = r50155 * r50148;
double r50157 = r50154 / r50156;
return r50157;
}
double f(double a, double b, double c) {
double r50158 = b;
double r50159 = -5.111313355666689e-81;
bool r50160 = r50158 <= r50159;
double r50161 = c;
double r50162 = 1.0;
double r50163 = cbrt(r50162);
double r50164 = r50161 * r50163;
double r50165 = r50164 / r50158;
double r50166 = r50163 * r50163;
double r50167 = r50165 * r50166;
double r50168 = -r50167;
double r50169 = 1.6624665080122465e+84;
bool r50170 = r50158 <= r50169;
double r50171 = -1.0;
double r50172 = 2.0;
double r50173 = a;
double r50174 = r50172 * r50173;
double r50175 = r50171 / r50174;
double r50176 = -r50161;
double r50177 = r50173 * r50176;
double r50178 = 4.0;
double r50179 = r50158 * r50158;
double r50180 = fma(r50177, r50178, r50179);
double r50181 = sqrt(r50180);
double r50182 = r50158 + r50181;
double r50183 = r50175 * r50182;
double r50184 = -r50162;
double r50185 = r50158 / r50173;
double r50186 = r50161 / r50158;
double r50187 = r50185 - r50186;
double r50188 = r50184 * r50187;
double r50189 = r50170 ? r50183 : r50188;
double r50190 = r50160 ? r50168 : r50189;
return r50190;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.3 |
|---|---|
| Target | 21.1 |
| Herbie | 9.8 |
if b < -5.111313355666689e-81Initial program 53.4
Simplified53.4
Taylor expanded around -inf 8.9
Simplified9.6
rmApplied *-un-lft-identity9.6
Applied *-un-lft-identity9.6
Applied times-frac9.6
Applied add-cube-cbrt9.6
Applied times-frac9.6
Simplified9.6
Simplified8.9
if -5.111313355666689e-81 < b < 1.6624665080122465e+84Initial program 13.2
Simplified13.2
rmApplied div-inv13.3
Simplified13.3
if 1.6624665080122465e+84 < b Initial program 43.9
Simplified43.9
Taylor expanded around inf 3.5
Simplified3.5
Final simplification9.8
herbie shell --seed 2019194 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))