\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.12428337420519208 \cdot 10^{57}:\\
\;\;\;\;\frac{\mathsf{fma}\left(2, \frac{c}{b}, \frac{b \cdot -2}{a}\right)}{2}\\
\mathbf{elif}\;b \le 3.84613441880260993 \cdot 10^{-81}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2} \cdot \frac{1}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r84147 = b;
double r84148 = -r84147;
double r84149 = r84147 * r84147;
double r84150 = 4.0;
double r84151 = a;
double r84152 = c;
double r84153 = r84151 * r84152;
double r84154 = r84150 * r84153;
double r84155 = r84149 - r84154;
double r84156 = sqrt(r84155);
double r84157 = r84148 + r84156;
double r84158 = 2.0;
double r84159 = r84158 * r84151;
double r84160 = r84157 / r84159;
return r84160;
}
double f(double a, double b, double c) {
double r84161 = b;
double r84162 = -3.124283374205192e+57;
bool r84163 = r84161 <= r84162;
double r84164 = 2.0;
double r84165 = c;
double r84166 = r84165 / r84161;
double r84167 = -2.0;
double r84168 = r84161 * r84167;
double r84169 = a;
double r84170 = r84168 / r84169;
double r84171 = fma(r84164, r84166, r84170);
double r84172 = r84171 / r84164;
double r84173 = 3.84613441880261e-81;
bool r84174 = r84161 <= r84173;
double r84175 = r84161 * r84161;
double r84176 = 4.0;
double r84177 = r84169 * r84165;
double r84178 = r84176 * r84177;
double r84179 = r84175 - r84178;
double r84180 = sqrt(r84179);
double r84181 = r84180 - r84161;
double r84182 = r84181 / r84164;
double r84183 = 1.0;
double r84184 = r84183 / r84169;
double r84185 = r84182 * r84184;
double r84186 = -2.0;
double r84187 = r84186 * r84166;
double r84188 = r84187 / r84164;
double r84189 = r84174 ? r84185 : r84188;
double r84190 = r84163 ? r84172 : r84189;
return r84190;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.8 |
|---|---|
| Target | 20.4 |
| Herbie | 10.1 |
if b < -3.124283374205192e+57Initial program 39.5
Simplified39.5
rmApplied div-inv39.6
rmApplied *-un-lft-identity39.6
Applied associate-*l*39.6
Simplified39.5
Taylor expanded around -inf 5.4
Simplified5.4
if -3.124283374205192e+57 < b < 3.84613441880261e-81Initial program 12.7
Simplified12.7
rmApplied div-inv12.8
if 3.84613441880261e-81 < b Initial program 53.0
Simplified53.0
rmApplied div-inv53.0
rmApplied *-un-lft-identity53.0
Applied associate-*l*53.0
Simplified53.0
Taylor expanded around inf 9.5
Final simplification10.1
herbie shell --seed 2020045 +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)))