\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.547666603636537260513437138645901028344 \cdot 10^{50}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 7.455592343308264166675918758902222662503 \cdot 10^{-170}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r66100 = b;
double r66101 = -r66100;
double r66102 = r66100 * r66100;
double r66103 = 4.0;
double r66104 = a;
double r66105 = c;
double r66106 = r66104 * r66105;
double r66107 = r66103 * r66106;
double r66108 = r66102 - r66107;
double r66109 = sqrt(r66108);
double r66110 = r66101 + r66109;
double r66111 = 2.0;
double r66112 = r66111 * r66104;
double r66113 = r66110 / r66112;
return r66113;
}
double f(double a, double b, double c) {
double r66114 = b;
double r66115 = -1.5476666036365373e+50;
bool r66116 = r66114 <= r66115;
double r66117 = 1.0;
double r66118 = c;
double r66119 = r66118 / r66114;
double r66120 = a;
double r66121 = r66114 / r66120;
double r66122 = r66119 - r66121;
double r66123 = r66117 * r66122;
double r66124 = 7.455592343308264e-170;
bool r66125 = r66114 <= r66124;
double r66126 = 1.0;
double r66127 = 2.0;
double r66128 = r66127 * r66120;
double r66129 = r66114 * r66114;
double r66130 = 4.0;
double r66131 = r66120 * r66118;
double r66132 = r66130 * r66131;
double r66133 = r66129 - r66132;
double r66134 = sqrt(r66133);
double r66135 = r66134 - r66114;
double r66136 = r66128 / r66135;
double r66137 = r66126 / r66136;
double r66138 = -1.0;
double r66139 = r66138 * r66119;
double r66140 = r66125 ? r66137 : r66139;
double r66141 = r66116 ? r66123 : r66140;
return r66141;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 20.8 |
| Herbie | 11.9 |
if b < -1.5476666036365373e+50Initial program 37.8
Simplified37.8
Taylor expanded around -inf 5.8
Simplified5.8
if -1.5476666036365373e+50 < b < 7.455592343308264e-170Initial program 12.4
Simplified12.4
rmApplied clear-num12.5
if 7.455592343308264e-170 < b Initial program 48.9
Simplified48.9
Taylor expanded around inf 14.1
Final simplification11.9
herbie shell --seed 2019323 +o rules:numerics
(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)))