\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.369694371126339229257094016308893237032 \cdot 10^{-83}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 2.678238127073728805877873599258558355989 \cdot 10^{53}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}, \sqrt[3]{-b}, -\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r85115 = b;
double r85116 = -r85115;
double r85117 = r85115 * r85115;
double r85118 = 4.0;
double r85119 = a;
double r85120 = c;
double r85121 = r85119 * r85120;
double r85122 = r85118 * r85121;
double r85123 = r85117 - r85122;
double r85124 = sqrt(r85123);
double r85125 = r85116 - r85124;
double r85126 = 2.0;
double r85127 = r85126 * r85119;
double r85128 = r85125 / r85127;
return r85128;
}
double f(double a, double b, double c) {
double r85129 = b;
double r85130 = -1.3696943711263392e-83;
bool r85131 = r85129 <= r85130;
double r85132 = -1.0;
double r85133 = c;
double r85134 = r85133 / r85129;
double r85135 = r85132 * r85134;
double r85136 = 2.678238127073729e+53;
bool r85137 = r85129 <= r85136;
double r85138 = -r85129;
double r85139 = cbrt(r85138);
double r85140 = r85139 * r85139;
double r85141 = r85129 * r85129;
double r85142 = 4.0;
double r85143 = a;
double r85144 = r85143 * r85133;
double r85145 = r85142 * r85144;
double r85146 = r85141 - r85145;
double r85147 = sqrt(r85146);
double r85148 = -r85147;
double r85149 = fma(r85140, r85139, r85148);
double r85150 = 2.0;
double r85151 = r85150 * r85143;
double r85152 = r85149 / r85151;
double r85153 = 1.0;
double r85154 = r85129 / r85143;
double r85155 = r85134 - r85154;
double r85156 = r85153 * r85155;
double r85157 = r85137 ? r85152 : r85156;
double r85158 = r85131 ? r85135 : r85157;
return r85158;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.8 |
|---|---|
| Target | 20.8 |
| Herbie | 10.2 |
if b < -1.3696943711263392e-83Initial program 53.2
Taylor expanded around -inf 9.4
if -1.3696943711263392e-83 < b < 2.678238127073729e+53Initial program 12.8
rmApplied add-cube-cbrt13.0
Applied fma-neg13.0
if 2.678238127073729e+53 < b Initial program 38.1
Taylor expanded around inf 5.7
Simplified5.7
Final simplification10.2
herbie shell --seed 2019362 +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)))