\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.0461303908572575 \cdot 10^{65}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 2.98127510036099003 \cdot 10^{-264}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{elif}\;b \le 2114787851.2472425:\\
\;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{2 \cdot a}}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r87317 = b;
double r87318 = -r87317;
double r87319 = r87317 * r87317;
double r87320 = 4.0;
double r87321 = a;
double r87322 = c;
double r87323 = r87321 * r87322;
double r87324 = r87320 * r87323;
double r87325 = r87319 - r87324;
double r87326 = sqrt(r87325);
double r87327 = r87318 + r87326;
double r87328 = 2.0;
double r87329 = r87328 * r87321;
double r87330 = r87327 / r87329;
return r87330;
}
double f(double a, double b, double c) {
double r87331 = b;
double r87332 = -1.0461303908572575e+65;
bool r87333 = r87331 <= r87332;
double r87334 = 1.0;
double r87335 = c;
double r87336 = r87335 / r87331;
double r87337 = a;
double r87338 = r87331 / r87337;
double r87339 = r87336 - r87338;
double r87340 = r87334 * r87339;
double r87341 = 2.98127510036099e-264;
bool r87342 = r87331 <= r87341;
double r87343 = 1.0;
double r87344 = 2.0;
double r87345 = r87344 * r87337;
double r87346 = -r87331;
double r87347 = r87331 * r87331;
double r87348 = 4.0;
double r87349 = r87337 * r87335;
double r87350 = r87348 * r87349;
double r87351 = r87347 - r87350;
double r87352 = sqrt(r87351);
double r87353 = r87346 + r87352;
double r87354 = r87345 / r87353;
double r87355 = r87343 / r87354;
double r87356 = 2114787851.2472425;
bool r87357 = r87331 <= r87356;
double r87358 = 2.0;
double r87359 = pow(r87331, r87358);
double r87360 = r87359 - r87359;
double r87361 = r87360 + r87350;
double r87362 = r87361 / r87345;
double r87363 = r87346 - r87352;
double r87364 = r87362 / r87363;
double r87365 = -1.0;
double r87366 = r87365 * r87336;
double r87367 = r87357 ? r87364 : r87366;
double r87368 = r87342 ? r87355 : r87367;
double r87369 = r87333 ? r87340 : r87368;
return r87369;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.4 |
|---|---|
| Target | 21.0 |
| Herbie | 9.1 |
if b < -1.0461303908572575e+65Initial program 41.3
Taylor expanded around -inf 4.6
Simplified4.6
if -1.0461303908572575e+65 < b < 2.98127510036099e-264Initial program 10.7
rmApplied clear-num10.8
if 2.98127510036099e-264 < b < 2114787851.2472425Initial program 27.8
rmApplied clear-num27.8
rmApplied flip-+27.8
Applied associate-/r/27.9
Applied associate-/r*27.9
Simplified17.7
if 2114787851.2472425 < b Initial program 56.3
Taylor expanded around inf 4.8
Final simplification9.1
herbie shell --seed 2020059
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))