\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -9.5975400610846271 \cdot 10^{115}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -5.49040980815040939 \cdot 10^{-305}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.29571176074688 \cdot 10^{130}:\\
\;\;\;\;\frac{1}{\frac{-b}{4} \cdot \frac{2}{c} + \frac{-\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{4} \cdot \frac{2}{c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r175110 = b;
double r175111 = -r175110;
double r175112 = r175110 * r175110;
double r175113 = 4.0;
double r175114 = a;
double r175115 = r175113 * r175114;
double r175116 = c;
double r175117 = r175115 * r175116;
double r175118 = r175112 - r175117;
double r175119 = sqrt(r175118);
double r175120 = r175111 + r175119;
double r175121 = 2.0;
double r175122 = r175121 * r175114;
double r175123 = r175120 / r175122;
return r175123;
}
double f(double a, double b, double c) {
double r175124 = b;
double r175125 = -9.597540061084627e+115;
bool r175126 = r175124 <= r175125;
double r175127 = 1.0;
double r175128 = c;
double r175129 = r175128 / r175124;
double r175130 = a;
double r175131 = r175124 / r175130;
double r175132 = r175129 - r175131;
double r175133 = r175127 * r175132;
double r175134 = -5.490409808150409e-305;
bool r175135 = r175124 <= r175134;
double r175136 = -r175124;
double r175137 = r175124 * r175124;
double r175138 = 4.0;
double r175139 = r175138 * r175130;
double r175140 = r175139 * r175128;
double r175141 = r175137 - r175140;
double r175142 = sqrt(r175141);
double r175143 = r175136 + r175142;
double r175144 = 2.0;
double r175145 = r175144 * r175130;
double r175146 = r175143 / r175145;
double r175147 = 3.29571176074688e+130;
bool r175148 = r175124 <= r175147;
double r175149 = 1.0;
double r175150 = r175136 / r175138;
double r175151 = r175144 / r175128;
double r175152 = r175150 * r175151;
double r175153 = -r175142;
double r175154 = r175153 / r175138;
double r175155 = r175154 * r175151;
double r175156 = r175152 + r175155;
double r175157 = r175149 / r175156;
double r175158 = -1.0;
double r175159 = r175158 * r175129;
double r175160 = r175148 ? r175157 : r175159;
double r175161 = r175135 ? r175146 : r175160;
double r175162 = r175126 ? r175133 : r175161;
return r175162;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.7 |
|---|---|
| Target | 20.9 |
| Herbie | 7.0 |
if b < -9.597540061084627e+115Initial program 48.7
Taylor expanded around -inf 3.3
Simplified3.3
if -9.597540061084627e+115 < b < -5.490409808150409e-305Initial program 8.7
if -5.490409808150409e-305 < b < 3.29571176074688e+130Initial program 34.3
rmApplied flip-+34.4
Simplified16.9
rmApplied clear-num17.1
Simplified16.0
rmApplied associate-/l*16.0
Simplified9.7
rmApplied sub-neg9.7
Applied distribute-lft-in9.7
Simplified9.7
Simplified9.7
if 3.29571176074688e+130 < b Initial program 61.2
Taylor expanded around inf 2.1
Final simplification7.0
herbie shell --seed 2020100
(FPCore (a b c)
:name "The quadratic formula (r1)"
: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)))