\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.017935821261199 \cdot 10^{+105}:\\
\;\;\;\;\left(\sqrt{\sqrt{\mathsf{fma}\left(-4, a \cdot c, b \cdot b\right)} - b} \cdot \frac{\frac{1}{2}}{a}\right) \cdot \sqrt{\sqrt{\mathsf{fma}\left(-4, a \cdot c, b \cdot b\right)} - b}\\
\mathbf{else}:\\
\;\;\;\;0\\
\end{array}double f(double a, double b, double c) {
double r1320226 = b;
double r1320227 = -r1320226;
double r1320228 = r1320226 * r1320226;
double r1320229 = 4.0;
double r1320230 = a;
double r1320231 = c;
double r1320232 = r1320230 * r1320231;
double r1320233 = r1320229 * r1320232;
double r1320234 = r1320228 - r1320233;
double r1320235 = sqrt(r1320234);
double r1320236 = r1320227 + r1320235;
double r1320237 = 2.0;
double r1320238 = r1320237 * r1320230;
double r1320239 = r1320236 / r1320238;
return r1320239;
}
double f(double a, double b, double c) {
double r1320240 = b;
double r1320241 = 1.017935821261199e+105;
bool r1320242 = r1320240 <= r1320241;
double r1320243 = -4.0;
double r1320244 = a;
double r1320245 = c;
double r1320246 = r1320244 * r1320245;
double r1320247 = r1320240 * r1320240;
double r1320248 = fma(r1320243, r1320246, r1320247);
double r1320249 = sqrt(r1320248);
double r1320250 = r1320249 - r1320240;
double r1320251 = sqrt(r1320250);
double r1320252 = 0.5;
double r1320253 = r1320252 / r1320244;
double r1320254 = r1320251 * r1320253;
double r1320255 = r1320254 * r1320251;
double r1320256 = 0.0;
double r1320257 = r1320242 ? r1320255 : r1320256;
return r1320257;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 32.9 |
|---|---|
| Target | 20.3 |
| Herbie | 29.0 |
if b < 1.017935821261199e+105Initial program 25.4
Simplified25.4
rmApplied *-un-lft-identity25.4
Applied div-inv25.5
Applied times-frac25.5
Simplified25.5
Simplified25.5
rmApplied add-sqr-sqrt25.8
Applied associate-*l*25.8
if 1.017935821261199e+105 < b Initial program 58.4
Simplified58.4
rmApplied *-un-lft-identity58.4
Applied div-inv58.4
Applied times-frac58.4
Simplified58.4
Simplified58.4
Taylor expanded around 0 39.7
Final simplification29.0
herbie shell --seed 2019153 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 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)))