\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 -5.58543573862810322 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -2.3730540219645598 \cdot 10^{-278}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{elif}\;b \le 1.55563303224959 \cdot 10^{106}:\\
\;\;\;\;\frac{1}{\frac{0.5}{c} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r71073 = b;
double r71074 = -r71073;
double r71075 = r71073 * r71073;
double r71076 = 4.0;
double r71077 = a;
double r71078 = c;
double r71079 = r71077 * r71078;
double r71080 = r71076 * r71079;
double r71081 = r71075 - r71080;
double r71082 = sqrt(r71081);
double r71083 = r71074 + r71082;
double r71084 = 2.0;
double r71085 = r71084 * r71077;
double r71086 = r71083 / r71085;
return r71086;
}
double f(double a, double b, double c) {
double r71087 = b;
double r71088 = -5.585435738628103e+150;
bool r71089 = r71087 <= r71088;
double r71090 = 1.0;
double r71091 = c;
double r71092 = r71091 / r71087;
double r71093 = a;
double r71094 = r71087 / r71093;
double r71095 = r71092 - r71094;
double r71096 = r71090 * r71095;
double r71097 = -2.3730540219645598e-278;
bool r71098 = r71087 <= r71097;
double r71099 = 1.0;
double r71100 = 2.0;
double r71101 = r71100 * r71093;
double r71102 = -r71087;
double r71103 = r71087 * r71087;
double r71104 = 4.0;
double r71105 = r71093 * r71091;
double r71106 = r71104 * r71105;
double r71107 = r71103 - r71106;
double r71108 = sqrt(r71107);
double r71109 = r71102 + r71108;
double r71110 = r71101 / r71109;
double r71111 = r71099 / r71110;
double r71112 = 1.55563303224959e+106;
bool r71113 = r71087 <= r71112;
double r71114 = 0.5;
double r71115 = r71114 / r71091;
double r71116 = r71102 - r71108;
double r71117 = r71115 * r71116;
double r71118 = r71099 / r71117;
double r71119 = -1.0;
double r71120 = r71119 * r71092;
double r71121 = r71113 ? r71118 : r71120;
double r71122 = r71098 ? r71111 : r71121;
double r71123 = r71089 ? r71096 : r71122;
return r71123;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 20.7 |
| Herbie | 6.9 |
if b < -5.585435738628103e+150Initial program 61.5
Taylor expanded around -inf 2.2
Simplified2.2
if -5.585435738628103e+150 < b < -2.3730540219645598e-278Initial program 8.2
rmApplied clear-num8.3
if -2.3730540219645598e-278 < b < 1.55563303224959e+106Initial program 31.3
rmApplied flip-+31.3
Simplified16.7
rmApplied *-un-lft-identity16.7
Applied *-un-lft-identity16.7
Applied times-frac16.7
Applied associate-/l*16.9
Simplified16.2
Taylor expanded around 0 9.9
if 1.55563303224959e+106 < b Initial program 60.3
Taylor expanded around inf 2.7
Final simplification6.9
herbie shell --seed 2020062 +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)))