\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 -7.06600713448898 \cdot 10^{+148}:\\
\;\;\;\;\frac{\frac{c}{\frac{b}{-a}}}{a}\\
\mathbf{elif}\;b \le -1.8674816151448643 \cdot 10^{-121}:\\
\;\;\;\;\frac{\frac{\left(4 \cdot a\right) \cdot c}{2 \cdot \left(\left(-b\right) + \sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)}\right)}}{a}\\
\mathbf{elif}\;b \le 5.436017879840864 \cdot 10^{+134}:\\
\;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)}}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;-\frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r6521047 = b;
double r6521048 = -r6521047;
double r6521049 = r6521047 * r6521047;
double r6521050 = 4.0;
double r6521051 = a;
double r6521052 = c;
double r6521053 = r6521051 * r6521052;
double r6521054 = r6521050 * r6521053;
double r6521055 = r6521049 - r6521054;
double r6521056 = sqrt(r6521055);
double r6521057 = r6521048 - r6521056;
double r6521058 = 2.0;
double r6521059 = r6521058 * r6521051;
double r6521060 = r6521057 / r6521059;
return r6521060;
}
double f(double a, double b, double c) {
double r6521061 = b;
double r6521062 = -7.06600713448898e+148;
bool r6521063 = r6521061 <= r6521062;
double r6521064 = c;
double r6521065 = a;
double r6521066 = -r6521065;
double r6521067 = r6521061 / r6521066;
double r6521068 = r6521064 / r6521067;
double r6521069 = r6521068 / r6521065;
double r6521070 = -1.8674816151448643e-121;
bool r6521071 = r6521061 <= r6521070;
double r6521072 = 4.0;
double r6521073 = r6521072 * r6521065;
double r6521074 = r6521073 * r6521064;
double r6521075 = 2.0;
double r6521076 = -r6521061;
double r6521077 = r6521064 * r6521065;
double r6521078 = -4.0;
double r6521079 = r6521061 * r6521061;
double r6521080 = fma(r6521077, r6521078, r6521079);
double r6521081 = sqrt(r6521080);
double r6521082 = r6521076 + r6521081;
double r6521083 = r6521075 * r6521082;
double r6521084 = r6521074 / r6521083;
double r6521085 = r6521084 / r6521065;
double r6521086 = 5.436017879840864e+134;
bool r6521087 = r6521061 <= r6521086;
double r6521088 = r6521076 - r6521081;
double r6521089 = r6521088 / r6521075;
double r6521090 = r6521089 / r6521065;
double r6521091 = r6521061 / r6521065;
double r6521092 = -r6521091;
double r6521093 = r6521087 ? r6521090 : r6521092;
double r6521094 = r6521071 ? r6521085 : r6521093;
double r6521095 = r6521063 ? r6521069 : r6521094;
return r6521095;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 32.9 |
|---|---|
| Target | 20.6 |
| Herbie | 12.3 |
if b < -7.06600713448898e+148Initial program 62.4
Simplified62.4
Taylor expanded around 0 62.4
Simplified62.4
Taylor expanded around -inf 15.6
Simplified17.3
if -7.06600713448898e+148 < b < -1.8674816151448643e-121Initial program 41.6
Simplified41.6
rmApplied flip--41.7
Applied associate-/l/41.7
Simplified15.7
if -1.8674816151448643e-121 < b < 5.436017879840864e+134Initial program 11.0
Simplified11.0
Taylor expanded around 0 11.0
Simplified11.0
if 5.436017879840864e+134 < b Initial program 53.5
Simplified53.5
Taylor expanded around 0 53.5
Simplified53.5
rmApplied add-sqr-sqrt53.7
Applied associate-/r*53.6
Taylor expanded around inf 4.8
Simplified3.7
Final simplification12.3
herbie shell --seed 2019121 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 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)))