\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 -4.16908657181932359 \cdot 10^{-104}:\\
\;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \frac{c}{b}\right)\\
\mathbf{elif}\;b \le 1.3316184968738608 \cdot 10^{61}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r90140 = b;
double r90141 = -r90140;
double r90142 = r90140 * r90140;
double r90143 = 4.0;
double r90144 = a;
double r90145 = c;
double r90146 = r90144 * r90145;
double r90147 = r90143 * r90146;
double r90148 = r90142 - r90147;
double r90149 = sqrt(r90148);
double r90150 = r90141 - r90149;
double r90151 = 2.0;
double r90152 = r90151 * r90144;
double r90153 = r90150 / r90152;
return r90153;
}
double f(double a, double b, double c) {
double r90154 = b;
double r90155 = -4.1690865718193236e-104;
bool r90156 = r90154 <= r90155;
double r90157 = 1.0;
double r90158 = 2.0;
double r90159 = r90157 / r90158;
double r90160 = -2.0;
double r90161 = c;
double r90162 = r90161 / r90154;
double r90163 = r90160 * r90162;
double r90164 = r90159 * r90163;
double r90165 = 1.3316184968738608e+61;
bool r90166 = r90154 <= r90165;
double r90167 = -r90154;
double r90168 = r90154 * r90154;
double r90169 = 4.0;
double r90170 = a;
double r90171 = r90170 * r90161;
double r90172 = r90169 * r90171;
double r90173 = r90168 - r90172;
double r90174 = sqrt(r90173);
double r90175 = r90167 - r90174;
double r90176 = r90175 / r90170;
double r90177 = r90159 * r90176;
double r90178 = -2.0;
double r90179 = r90154 / r90170;
double r90180 = r90178 * r90179;
double r90181 = r90159 * r90180;
double r90182 = r90166 ? r90177 : r90181;
double r90183 = r90156 ? r90164 : r90182;
return r90183;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.6 |
|---|---|
| Target | 20.6 |
| Herbie | 10.3 |
if b < -4.1690865718193236e-104Initial program 51.5
rmApplied *-un-lft-identity51.5
Applied times-frac51.5
Taylor expanded around -inf 11.0
if -4.1690865718193236e-104 < b < 1.3316184968738608e+61Initial program 12.3
rmApplied *-un-lft-identity12.3
Applied times-frac12.3
rmApplied clear-num12.4
rmApplied *-un-lft-identity12.4
Applied *-un-lft-identity12.4
Applied times-frac12.4
Applied add-cube-cbrt12.4
Applied times-frac12.4
Simplified12.4
Simplified12.3
if 1.3316184968738608e+61 < b Initial program 39.6
rmApplied *-un-lft-identity39.6
Applied times-frac39.5
rmApplied clear-num39.6
Taylor expanded around 0 4.6
Final simplification10.3
herbie shell --seed 2020045 +o rules:numerics
(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)))