\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 -1.970010565552108757188050455448622102575 \cdot 10^{58}:\\
\;\;\;\;\frac{c}{b} \cdot -1\\
\mathbf{elif}\;b \le -1.018798663578592878613720979047018430442 \cdot 10^{-256}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{a}{\frac{\sqrt{b \cdot b - a \cdot \left(c \cdot 4\right)} - b}{c \cdot 4}}} \cdot \left(\sqrt[3]{\frac{a}{\frac{\sqrt{b \cdot b - a \cdot \left(c \cdot 4\right)} - b}{c \cdot 4}}} \cdot \sqrt[3]{\frac{a}{\frac{\sqrt{b \cdot b - a \cdot \left(c \cdot 4\right)} - b}{c \cdot 4}}}\right)}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.628799960716311990444092539387346352569 \cdot 10^{50}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - a \cdot \left(c \cdot 4\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r91207 = b;
double r91208 = -r91207;
double r91209 = r91207 * r91207;
double r91210 = 4.0;
double r91211 = a;
double r91212 = c;
double r91213 = r91211 * r91212;
double r91214 = r91210 * r91213;
double r91215 = r91209 - r91214;
double r91216 = sqrt(r91215);
double r91217 = r91208 - r91216;
double r91218 = 2.0;
double r91219 = r91218 * r91211;
double r91220 = r91217 / r91219;
return r91220;
}
double f(double a, double b, double c) {
double r91221 = b;
double r91222 = -1.9700105655521088e+58;
bool r91223 = r91221 <= r91222;
double r91224 = c;
double r91225 = r91224 / r91221;
double r91226 = -1.0;
double r91227 = r91225 * r91226;
double r91228 = -1.0187986635785929e-256;
bool r91229 = r91221 <= r91228;
double r91230 = a;
double r91231 = r91221 * r91221;
double r91232 = 4.0;
double r91233 = r91224 * r91232;
double r91234 = r91230 * r91233;
double r91235 = r91231 - r91234;
double r91236 = sqrt(r91235);
double r91237 = r91236 - r91221;
double r91238 = r91237 / r91233;
double r91239 = r91230 / r91238;
double r91240 = cbrt(r91239);
double r91241 = r91240 * r91240;
double r91242 = r91240 * r91241;
double r91243 = 2.0;
double r91244 = r91243 * r91230;
double r91245 = r91242 / r91244;
double r91246 = 3.628799960716312e+50;
bool r91247 = r91221 <= r91246;
double r91248 = -r91221;
double r91249 = r91248 - r91236;
double r91250 = r91249 / r91244;
double r91251 = r91221 / r91230;
double r91252 = r91226 * r91251;
double r91253 = r91247 ? r91250 : r91252;
double r91254 = r91229 ? r91245 : r91253;
double r91255 = r91223 ? r91227 : r91254;
return r91255;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 20.7 |
| Herbie | 8.6 |
if b < -1.9700105655521088e+58Initial program 57.5
Simplified57.5
rmApplied div-inv57.5
Taylor expanded around -inf 3.4
Simplified3.4
if -1.9700105655521088e+58 < b < -1.0187986635785929e-256Initial program 31.6
Simplified31.7
rmApplied flip--31.8
Simplified17.3
Simplified17.3
rmApplied add-cube-cbrt18.0
Simplified18.0
Simplified15.0
if -1.0187986635785929e-256 < b < 3.628799960716312e+50Initial program 10.0
Simplified10.1
if 3.628799960716312e+50 < b Initial program 38.2
Simplified38.2
rmApplied clear-num38.3
Taylor expanded around 0 6.3
Simplified6.3
Final simplification8.6
herbie shell --seed 2019179
(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)))