double f(double a, double b, double c) {
double r7022737 = b;
double r7022738 = -r7022737;
double r7022739 = r7022737 * r7022737;
double r7022740 = 4.0;
double r7022741 = a;
double r7022742 = c;
double r7022743 = r7022741 * r7022742;
double r7022744 = r7022740 * r7022743;
double r7022745 = r7022739 - r7022744;
double r7022746 = sqrt(r7022745);
double r7022747 = r7022738 - r7022746;
double r7022748 = 2.0;
double r7022749 = r7022748 * r7022741;
double r7022750 = r7022747 / r7022749;
return r7022750;
}
double f(double a, double b, double c) {
double r7022751 = b;
double r7022752 = -1.762479091812706e+65;
bool r7022753 = r7022751 <= r7022752;
double r7022754 = c;
double r7022755 = r7022754 / r7022751;
double r7022756 = -r7022755;
double r7022757 = -2.436990347475487e-257;
bool r7022758 = r7022751 <= r7022757;
double r7022759 = 4.0;
double r7022760 = -4.0;
double r7022761 = a;
double r7022762 = r7022760 * r7022761;
double r7022763 = r7022754 * r7022762;
double r7022764 = r7022751 * r7022751;
double r7022765 = r7022763 + r7022764;
double r7022766 = sqrt(r7022765);
double r7022767 = r7022766 - r7022751;
double r7022768 = r7022759 / r7022767;
double r7022769 = 0.5;
double r7022770 = r7022769 * r7022754;
double r7022771 = r7022768 * r7022770;
double r7022772 = 2.598286182153128e+84;
bool r7022773 = r7022751 <= r7022772;
double r7022774 = -r7022751;
double r7022775 = r7022754 * r7022760;
double r7022776 = r7022775 * r7022761;
double r7022777 = r7022764 + r7022776;
double r7022778 = sqrt(r7022777);
double r7022779 = r7022774 - r7022778;
double r7022780 = 2.0;
double r7022781 = r7022780 * r7022761;
double r7022782 = r7022779 / r7022781;
double r7022783 = r7022751 / r7022761;
double r7022784 = -r7022783;
double r7022785 = r7022773 ? r7022782 : r7022784;
double r7022786 = r7022758 ? r7022771 : r7022785;
double r7022787 = r7022753 ? r7022756 : r7022786;
return r7022787;
}
\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.762479091812706 \cdot 10^{+65}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le -2.436990347475487 \cdot 10^{-257}:\\
\;\;\;\;\frac{4}{\sqrt{c \cdot \left(-4 \cdot a\right) + b \cdot b} - b} \cdot \left(\frac{1}{2} \cdot c\right)\\
\mathbf{elif}\;b \le 2.598286182153128 \cdot 10^{+84}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b + \left(c \cdot -4\right) \cdot a}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-\frac{b}{a}\\
\end{array}



Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.2 |
|---|---|
| Target | 20.1 |
| Herbie | 7.0 |
if b < -1.762479091812706e+65Initial program 57.3
Taylor expanded around -inf 3.8
Simplified3.8
if -1.762479091812706e+65 < b < -2.436990347475487e-257Initial program 31.7
rmApplied flip--31.8
Applied associate-/l/36.6
Simplified21.3
rmApplied times-frac15.9
Simplified8.3
Simplified8.3
if -2.436990347475487e-257 < b < 2.598286182153128e+84Initial program 10.0
Taylor expanded around 0 10.0
Simplified10.0
if 2.598286182153128e+84 < b Initial program 40.7
rmApplied flip--60.9
Applied associate-/l/61.2
Simplified61.4
Taylor expanded around 0 4.5
Simplified4.5
Final simplification7.0
herbie shell --seed 2019101
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 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)))