\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 -3.060976138917674342180206539993786896862 \cdot 10^{65}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 9.309132026770995650363181051663395193386 \cdot 10^{-260}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{elif}\;b \le 3.060086240952484933101056948283122555149 \cdot 10^{128}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r105155 = b;
double r105156 = -r105155;
double r105157 = r105155 * r105155;
double r105158 = 4.0;
double r105159 = a;
double r105160 = c;
double r105161 = r105159 * r105160;
double r105162 = r105158 * r105161;
double r105163 = r105157 - r105162;
double r105164 = sqrt(r105163);
double r105165 = r105156 - r105164;
double r105166 = 2.0;
double r105167 = r105166 * r105159;
double r105168 = r105165 / r105167;
return r105168;
}
double f(double a, double b, double c) {
double r105169 = b;
double r105170 = -3.0609761389176743e+65;
bool r105171 = r105169 <= r105170;
double r105172 = -1.0;
double r105173 = c;
double r105174 = r105173 / r105169;
double r105175 = r105172 * r105174;
double r105176 = 9.309132026770996e-260;
bool r105177 = r105169 <= r105176;
double r105178 = 2.0;
double r105179 = r105178 * r105173;
double r105180 = -r105169;
double r105181 = r105169 * r105169;
double r105182 = 4.0;
double r105183 = a;
double r105184 = r105183 * r105173;
double r105185 = r105182 * r105184;
double r105186 = r105181 - r105185;
double r105187 = sqrt(r105186);
double r105188 = r105180 + r105187;
double r105189 = r105179 / r105188;
double r105190 = 3.060086240952485e+128;
bool r105191 = r105169 <= r105190;
double r105192 = 1.0;
double r105193 = r105178 * r105183;
double r105194 = r105180 - r105187;
double r105195 = r105193 / r105194;
double r105196 = r105192 / r105195;
double r105197 = 1.0;
double r105198 = r105169 / r105183;
double r105199 = r105174 - r105198;
double r105200 = r105197 * r105199;
double r105201 = r105191 ? r105196 : r105200;
double r105202 = r105177 ? r105189 : r105201;
double r105203 = r105171 ? r105175 : r105202;
return r105203;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.6 |
|---|---|
| Target | 20.1 |
| Herbie | 6.5 |
if b < -3.0609761389176743e+65Initial program 57.9
Taylor expanded around -inf 3.2
if -3.0609761389176743e+65 < b < 9.309132026770996e-260Initial program 28.3
rmApplied clear-num28.3
rmApplied flip--28.4
Applied associate-/r/28.4
Applied associate-/r*28.4
Simplified15.6
Taylor expanded around 0 9.3
if 9.309132026770996e-260 < b < 3.060086240952485e+128Initial program 7.9
rmApplied clear-num8.0
if 3.060086240952485e+128 < b Initial program 54.3
Taylor expanded around inf 3.1
Simplified3.1
Final simplification6.5
herbie shell --seed 2019356
(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)))