\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 -3.56950087216670373365855698069146367898 \cdot 10^{75}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le 3.362006515454413652749664796489007484285 \cdot 10^{-75}:\\
\;\;\;\;\frac{1}{\frac{a}{\sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} - b} \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot -1}{b}\\
\end{array}double f(double a, double b, double c) {
double r52297 = b;
double r52298 = -r52297;
double r52299 = r52297 * r52297;
double r52300 = 4.0;
double r52301 = a;
double r52302 = c;
double r52303 = r52301 * r52302;
double r52304 = r52300 * r52303;
double r52305 = r52299 - r52304;
double r52306 = sqrt(r52305);
double r52307 = r52298 + r52306;
double r52308 = 2.0;
double r52309 = r52308 * r52301;
double r52310 = r52307 / r52309;
return r52310;
}
double f(double a, double b, double c) {
double r52311 = b;
double r52312 = -3.5695008721667037e+75;
bool r52313 = r52311 <= r52312;
double r52314 = c;
double r52315 = r52314 / r52311;
double r52316 = a;
double r52317 = r52311 / r52316;
double r52318 = r52315 - r52317;
double r52319 = 1.0;
double r52320 = r52318 * r52319;
double r52321 = 3.3620065154544137e-75;
bool r52322 = r52311 <= r52321;
double r52323 = 1.0;
double r52324 = r52311 * r52311;
double r52325 = 4.0;
double r52326 = r52314 * r52316;
double r52327 = r52325 * r52326;
double r52328 = r52324 - r52327;
double r52329 = sqrt(r52328);
double r52330 = r52329 - r52311;
double r52331 = r52316 / r52330;
double r52332 = 2.0;
double r52333 = r52331 * r52332;
double r52334 = r52323 / r52333;
double r52335 = -1.0;
double r52336 = r52314 * r52335;
double r52337 = r52336 / r52311;
double r52338 = r52322 ? r52334 : r52337;
double r52339 = r52313 ? r52320 : r52338;
return r52339;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 21.2 |
| Herbie | 10.2 |
if b < -3.5695008721667037e+75Initial program 42.1
Simplified42.1
Taylor expanded around -inf 4.0
Simplified4.0
if -3.5695008721667037e+75 < b < 3.3620065154544137e-75Initial program 13.4
Simplified13.4
rmApplied *-un-lft-identity13.4
Applied *-un-lft-identity13.4
Applied times-frac13.4
Applied associate-/l*13.5
Simplified13.5
if 3.3620065154544137e-75 < b Initial program 53.0
Simplified53.0
Taylor expanded around inf 9.3
Simplified9.3
Final simplification10.2
herbie shell --seed 2019195
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))