\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 -2.3044033969831823 \cdot 10^{153}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 3.2001964328628576 \cdot 10^{-306}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.3690530579691639 \cdot 10^{141}:\\
\;\;\;\;\frac{2 \cdot c}{\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 r64297 = b;
double r64298 = -r64297;
double r64299 = r64297 * r64297;
double r64300 = 4.0;
double r64301 = a;
double r64302 = c;
double r64303 = r64301 * r64302;
double r64304 = r64300 * r64303;
double r64305 = r64299 - r64304;
double r64306 = sqrt(r64305);
double r64307 = r64298 + r64306;
double r64308 = 2.0;
double r64309 = r64308 * r64301;
double r64310 = r64307 / r64309;
return r64310;
}
double f(double a, double b, double c) {
double r64311 = b;
double r64312 = -2.3044033969831823e+153;
bool r64313 = r64311 <= r64312;
double r64314 = 1.0;
double r64315 = c;
double r64316 = r64315 / r64311;
double r64317 = a;
double r64318 = r64311 / r64317;
double r64319 = r64316 - r64318;
double r64320 = r64314 * r64319;
double r64321 = 3.2001964328628576e-306;
bool r64322 = r64311 <= r64321;
double r64323 = -r64311;
double r64324 = r64311 * r64311;
double r64325 = 4.0;
double r64326 = r64317 * r64315;
double r64327 = r64325 * r64326;
double r64328 = r64324 - r64327;
double r64329 = sqrt(r64328);
double r64330 = r64323 + r64329;
double r64331 = 2.0;
double r64332 = r64331 * r64317;
double r64333 = r64330 / r64332;
double r64334 = 3.369053057969164e+141;
bool r64335 = r64311 <= r64334;
double r64336 = r64331 * r64315;
double r64337 = r64323 - r64329;
double r64338 = r64336 / r64337;
double r64339 = -1.0;
double r64340 = r64339 * r64316;
double r64341 = r64335 ? r64338 : r64340;
double r64342 = r64322 ? r64333 : r64341;
double r64343 = r64313 ? r64320 : r64342;
return r64343;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.6 |
| Herbie | 6.5 |
if b < -2.3044033969831823e+153Initial program 63.5
Taylor expanded around -inf 2.0
Simplified2.0
if -2.3044033969831823e+153 < b < 3.2001964328628576e-306Initial program 8.8
if 3.2001964328628576e-306 < b < 3.369053057969164e+141Initial program 34.4
rmApplied clear-num34.4
rmApplied flip-+34.4
Applied associate-/r/34.4
Applied associate-/r*34.5
Simplified14.9
Taylor expanded around 0 8.3
if 3.369053057969164e+141 < b Initial program 62.5
Taylor expanded around inf 1.5
Final simplification6.5
herbie shell --seed 2020060
(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)))