\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -5.52306947897632778228201833866057110671 \cdot 10^{123}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -8.219482842591944840806672041838142939496 \cdot 10^{-296}:\\
\;\;\;\;\frac{\sqrt[3]{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt[3]{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2} \cdot \frac{\sqrt[3]{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{a}\\
\mathbf{elif}\;b \le 1.372075260173852414460256827675964027367 \cdot 10^{126}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r92199 = b;
double r92200 = -r92199;
double r92201 = r92199 * r92199;
double r92202 = 4.0;
double r92203 = a;
double r92204 = r92202 * r92203;
double r92205 = c;
double r92206 = r92204 * r92205;
double r92207 = r92201 - r92206;
double r92208 = sqrt(r92207);
double r92209 = r92200 + r92208;
double r92210 = 2.0;
double r92211 = r92210 * r92203;
double r92212 = r92209 / r92211;
return r92212;
}
double f(double a, double b, double c) {
double r92213 = b;
double r92214 = -5.523069478976328e+123;
bool r92215 = r92213 <= r92214;
double r92216 = 1.0;
double r92217 = c;
double r92218 = r92217 / r92213;
double r92219 = a;
double r92220 = r92213 / r92219;
double r92221 = r92218 - r92220;
double r92222 = r92216 * r92221;
double r92223 = -8.219482842591945e-296;
bool r92224 = r92213 <= r92223;
double r92225 = -r92213;
double r92226 = r92213 * r92213;
double r92227 = 4.0;
double r92228 = r92227 * r92219;
double r92229 = r92228 * r92217;
double r92230 = r92226 - r92229;
double r92231 = sqrt(r92230);
double r92232 = r92225 + r92231;
double r92233 = cbrt(r92232);
double r92234 = r92233 * r92233;
double r92235 = 2.0;
double r92236 = r92234 / r92235;
double r92237 = r92233 / r92219;
double r92238 = r92236 * r92237;
double r92239 = 1.3720752601738524e+126;
bool r92240 = r92213 <= r92239;
double r92241 = r92235 * r92217;
double r92242 = r92225 - r92231;
double r92243 = r92241 / r92242;
double r92244 = -1.0;
double r92245 = r92244 * r92218;
double r92246 = r92240 ? r92243 : r92245;
double r92247 = r92224 ? r92238 : r92246;
double r92248 = r92215 ? r92222 : r92247;
return r92248;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 21.5 |
| Herbie | 6.5 |
if b < -5.523069478976328e+123Initial program 54.0
Taylor expanded around -inf 2.9
Simplified2.9
if -5.523069478976328e+123 < b < -8.219482842591945e-296Initial program 8.1
rmApplied add-cube-cbrt9.2
Applied times-frac9.2
if -8.219482842591945e-296 < b < 1.3720752601738524e+126Initial program 33.6
rmApplied flip-+33.6
Simplified16.4
rmApplied div-inv16.5
rmApplied associate-*l/15.2
Simplified15.1
Taylor expanded around 0 8.7
if 1.3720752601738524e+126 < b Initial program 60.9
Taylor expanded around inf 1.8
Final simplification6.5
herbie shell --seed 2019318
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))