\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.76351621427461392823177571966952670558 \cdot 10^{80}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -4.275041523480463755960237531055658758378 \cdot 10^{-132}:\\
\;\;\;\;\frac{4 \cdot \left(a \cdot c\right)}{2} \cdot \frac{\frac{1}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - b}}{a}\\
\mathbf{elif}\;b \le 2098867031.934578418731689453125:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r73223 = b;
double r73224 = -r73223;
double r73225 = r73223 * r73223;
double r73226 = 4.0;
double r73227 = a;
double r73228 = c;
double r73229 = r73227 * r73228;
double r73230 = r73226 * r73229;
double r73231 = r73225 - r73230;
double r73232 = sqrt(r73231);
double r73233 = r73224 - r73232;
double r73234 = 2.0;
double r73235 = r73234 * r73227;
double r73236 = r73233 / r73235;
return r73236;
}
double f(double a, double b, double c) {
double r73237 = b;
double r73238 = -1.763516214274614e+80;
bool r73239 = r73237 <= r73238;
double r73240 = -1.0;
double r73241 = c;
double r73242 = r73241 / r73237;
double r73243 = r73240 * r73242;
double r73244 = -4.275041523480464e-132;
bool r73245 = r73237 <= r73244;
double r73246 = 4.0;
double r73247 = a;
double r73248 = r73247 * r73241;
double r73249 = r73246 * r73248;
double r73250 = 2.0;
double r73251 = r73249 / r73250;
double r73252 = 1.0;
double r73253 = r73237 * r73237;
double r73254 = r73248 * r73246;
double r73255 = r73253 - r73254;
double r73256 = sqrt(r73255);
double r73257 = r73256 - r73237;
double r73258 = r73252 / r73257;
double r73259 = r73258 / r73247;
double r73260 = r73251 * r73259;
double r73261 = 2098867031.9345784;
bool r73262 = r73237 <= r73261;
double r73263 = -r73237;
double r73264 = r73253 - r73249;
double r73265 = sqrt(r73264);
double r73266 = r73263 - r73265;
double r73267 = r73250 * r73247;
double r73268 = r73266 / r73267;
double r73269 = 1.0;
double r73270 = r73237 / r73247;
double r73271 = r73242 - r73270;
double r73272 = r73269 * r73271;
double r73273 = r73262 ? r73268 : r73272;
double r73274 = r73245 ? r73260 : r73273;
double r73275 = r73239 ? r73243 : r73274;
return r73275;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 20.9 |
| Herbie | 10.6 |
if b < -1.763516214274614e+80Initial program 58.0
Taylor expanded around -inf 2.8
if -1.763516214274614e+80 < b < -4.275041523480464e-132Initial program 39.7
rmApplied flip--39.7
Simplified15.4
Simplified15.4
Taylor expanded around 0 15.4
Simplified15.4
rmApplied div-inv15.4
Applied times-frac18.9
Simplified18.9
if -4.275041523480464e-132 < b < 2098867031.9345784Initial program 14.4
if 2098867031.9345784 < b Initial program 32.3
Taylor expanded around inf 7.0
Simplified7.0
Final simplification10.6
herbie shell --seed 2019209
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))