\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 -8.889080831912834239838349081155498349678 \cdot 10^{153}:\\
\;\;\;\;\frac{2 \cdot \frac{c}{b} - 2 \cdot \frac{b}{a}}{2}\\
\mathbf{elif}\;b \le 7.666823646884851555969061278738005639466 \cdot 10^{-125}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{a}}{2}\\
\mathbf{elif}\;b \le 3.767837895140893460592828575869746587098 \cdot 10^{89}:\\
\;\;\;\;\frac{\frac{\frac{-4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} + b}}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r46255 = b;
double r46256 = -r46255;
double r46257 = r46255 * r46255;
double r46258 = 4.0;
double r46259 = a;
double r46260 = c;
double r46261 = r46259 * r46260;
double r46262 = r46258 * r46261;
double r46263 = r46257 - r46262;
double r46264 = sqrt(r46263);
double r46265 = r46256 + r46264;
double r46266 = 2.0;
double r46267 = r46266 * r46259;
double r46268 = r46265 / r46267;
return r46268;
}
double f(double a, double b, double c) {
double r46269 = b;
double r46270 = -8.889080831912834e+153;
bool r46271 = r46269 <= r46270;
double r46272 = 2.0;
double r46273 = c;
double r46274 = r46273 / r46269;
double r46275 = r46272 * r46274;
double r46276 = 2.0;
double r46277 = a;
double r46278 = r46269 / r46277;
double r46279 = r46276 * r46278;
double r46280 = r46275 - r46279;
double r46281 = r46280 / r46272;
double r46282 = 7.666823646884852e-125;
bool r46283 = r46269 <= r46282;
double r46284 = r46269 * r46269;
double r46285 = 4.0;
double r46286 = r46277 * r46273;
double r46287 = r46285 * r46286;
double r46288 = r46284 - r46287;
double r46289 = sqrt(r46288);
double r46290 = r46289 - r46269;
double r46291 = r46290 / r46277;
double r46292 = r46291 / r46272;
double r46293 = 3.7678378951408935e+89;
bool r46294 = r46269 <= r46293;
double r46295 = -r46287;
double r46296 = r46289 + r46269;
double r46297 = r46295 / r46296;
double r46298 = r46297 / r46277;
double r46299 = r46298 / r46272;
double r46300 = -2.0;
double r46301 = r46300 * r46274;
double r46302 = r46301 / r46272;
double r46303 = r46294 ? r46299 : r46302;
double r46304 = r46283 ? r46292 : r46303;
double r46305 = r46271 ? r46281 : r46304;
return r46305;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 20.8 |
| Herbie | 8.9 |
if b < -8.889080831912834e+153Initial program 64.0
Simplified64.0
rmApplied associate-/r*64.0
rmApplied div-inv64.0
rmApplied associate-*l/64.0
Simplified64.0
Taylor expanded around -inf 2.9
if -8.889080831912834e+153 < b < 7.666823646884852e-125Initial program 11.0
Simplified11.0
rmApplied associate-/r*11.0
rmApplied div-inv11.2
rmApplied associate-*l/11.2
Simplified11.0
if 7.666823646884852e-125 < b < 3.7678378951408935e+89Initial program 40.1
Simplified40.1
rmApplied associate-/r*40.1
rmApplied div-inv40.1
rmApplied associate-*l/40.1
Simplified40.1
rmApplied flip--40.1
Simplified15.9
if 3.7678378951408935e+89 < b Initial program 59.4
Simplified59.4
rmApplied associate-/r*59.4
rmApplied div-inv59.4
rmApplied associate-*l/59.4
Simplified59.4
Taylor expanded around inf 2.5
Final simplification8.9
herbie shell --seed 2019347
(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)))