\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.8260933955440565 \cdot 10^{-16}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le -1.0403213044374248 \cdot 10^{-202}:\\
\;\;\;\;\frac{c}{\frac{2 \cdot a}{\frac{a \cdot 4}{\sqrt{b \cdot b - \left(a \cdot 4\right) \cdot c} - b}}}\\
\mathbf{elif}\;b \le 4.738941069295542 \cdot 10^{+124}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r3706063 = b;
double r3706064 = -r3706063;
double r3706065 = r3706063 * r3706063;
double r3706066 = 4.0;
double r3706067 = a;
double r3706068 = c;
double r3706069 = r3706067 * r3706068;
double r3706070 = r3706066 * r3706069;
double r3706071 = r3706065 - r3706070;
double r3706072 = sqrt(r3706071);
double r3706073 = r3706064 - r3706072;
double r3706074 = 2.0;
double r3706075 = r3706074 * r3706067;
double r3706076 = r3706073 / r3706075;
return r3706076;
}
double f(double a, double b, double c) {
double r3706077 = b;
double r3706078 = -3.8260933955440565e-16;
bool r3706079 = r3706077 <= r3706078;
double r3706080 = c;
double r3706081 = r3706080 / r3706077;
double r3706082 = -r3706081;
double r3706083 = -1.0403213044374248e-202;
bool r3706084 = r3706077 <= r3706083;
double r3706085 = 2.0;
double r3706086 = a;
double r3706087 = r3706085 * r3706086;
double r3706088 = 4.0;
double r3706089 = r3706086 * r3706088;
double r3706090 = r3706077 * r3706077;
double r3706091 = r3706089 * r3706080;
double r3706092 = r3706090 - r3706091;
double r3706093 = sqrt(r3706092);
double r3706094 = r3706093 - r3706077;
double r3706095 = r3706089 / r3706094;
double r3706096 = r3706087 / r3706095;
double r3706097 = r3706080 / r3706096;
double r3706098 = 4.738941069295542e+124;
bool r3706099 = r3706077 <= r3706098;
double r3706100 = -r3706077;
double r3706101 = r3706080 * r3706086;
double r3706102 = r3706088 * r3706101;
double r3706103 = r3706090 - r3706102;
double r3706104 = sqrt(r3706103);
double r3706105 = r3706100 - r3706104;
double r3706106 = r3706105 / r3706087;
double r3706107 = r3706077 / r3706086;
double r3706108 = r3706081 - r3706107;
double r3706109 = r3706099 ? r3706106 : r3706108;
double r3706110 = r3706084 ? r3706097 : r3706109;
double r3706111 = r3706079 ? r3706082 : r3706110;
return r3706111;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.6 |
|---|---|
| Target | 20.8 |
| Herbie | 7.8 |
if b < -3.8260933955440565e-16Initial program 54.0
Taylor expanded around -inf 6.5
Simplified6.5
if -3.8260933955440565e-16 < b < -1.0403213044374248e-202Initial program 28.6
rmApplied add-sqr-sqrt28.6
Applied sqrt-prod28.9
rmApplied flip--29.0
Simplified17.7
Simplified17.5
rmApplied *-un-lft-identity17.5
Applied times-frac13.0
Applied associate-/l*7.9
if -1.0403213044374248e-202 < b < 4.738941069295542e+124Initial program 10.6
if 4.738941069295542e+124 < b Initial program 50.6
Taylor expanded around inf 2.9
Final simplification7.8
herbie shell --seed 2019162
(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)))