\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{\left(a \cdot c\right) \cdot 4}{2} \cdot \frac{\frac{1}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - 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 r80562 = b;
double r80563 = -r80562;
double r80564 = r80562 * r80562;
double r80565 = 4.0;
double r80566 = a;
double r80567 = c;
double r80568 = r80566 * r80567;
double r80569 = r80565 * r80568;
double r80570 = r80564 - r80569;
double r80571 = sqrt(r80570);
double r80572 = r80563 - r80571;
double r80573 = 2.0;
double r80574 = r80573 * r80566;
double r80575 = r80572 / r80574;
return r80575;
}
double f(double a, double b, double c) {
double r80576 = b;
double r80577 = -1.763516214274614e+80;
bool r80578 = r80576 <= r80577;
double r80579 = -1.0;
double r80580 = c;
double r80581 = r80580 / r80576;
double r80582 = r80579 * r80581;
double r80583 = -4.275041523480464e-132;
bool r80584 = r80576 <= r80583;
double r80585 = a;
double r80586 = r80585 * r80580;
double r80587 = 4.0;
double r80588 = r80586 * r80587;
double r80589 = 2.0;
double r80590 = r80588 / r80589;
double r80591 = 1.0;
double r80592 = r80576 * r80576;
double r80593 = r80587 * r80586;
double r80594 = r80592 - r80593;
double r80595 = sqrt(r80594);
double r80596 = r80595 - r80576;
double r80597 = r80591 / r80596;
double r80598 = r80597 / r80585;
double r80599 = r80590 * r80598;
double r80600 = 2098867031.9345784;
bool r80601 = r80576 <= r80600;
double r80602 = -r80576;
double r80603 = r80602 - r80595;
double r80604 = r80589 * r80585;
double r80605 = r80603 / r80604;
double r80606 = 1.0;
double r80607 = r80576 / r80585;
double r80608 = r80581 - r80607;
double r80609 = r80606 * r80608;
double r80610 = r80601 ? r80605 : r80609;
double r80611 = r80584 ? r80599 : r80610;
double r80612 = r80578 ? r80582 : r80611;
return r80612;
}




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
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 "quadm (p42, negative)"
: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)))