\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re
\left(\left(x.im + x.re\right) \cdot x.im\right) \cdot \left(x.re - x.im\right) + \left(\sqrt[3]{x.re \cdot x.im + x.re \cdot x.im} \cdot \sqrt[3]{x.re \cdot x.im + x.re \cdot x.im}\right) \cdot \left(\sqrt[3]{x.re \cdot x.im + x.re \cdot x.im} \cdot x.re\right)double f(double x_re, double x_im) {
double r48495049 = x_re;
double r48495050 = r48495049 * r48495049;
double r48495051 = x_im;
double r48495052 = r48495051 * r48495051;
double r48495053 = r48495050 - r48495052;
double r48495054 = r48495053 * r48495051;
double r48495055 = r48495049 * r48495051;
double r48495056 = r48495051 * r48495049;
double r48495057 = r48495055 + r48495056;
double r48495058 = r48495057 * r48495049;
double r48495059 = r48495054 + r48495058;
return r48495059;
}
double f(double x_re, double x_im) {
double r48495060 = x_im;
double r48495061 = x_re;
double r48495062 = r48495060 + r48495061;
double r48495063 = r48495062 * r48495060;
double r48495064 = r48495061 - r48495060;
double r48495065 = r48495063 * r48495064;
double r48495066 = r48495061 * r48495060;
double r48495067 = r48495066 + r48495066;
double r48495068 = cbrt(r48495067);
double r48495069 = r48495068 * r48495068;
double r48495070 = r48495068 * r48495061;
double r48495071 = r48495069 * r48495070;
double r48495072 = r48495065 + r48495071;
return r48495072;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.6 |
Initial program 7.0
Taylor expanded around inf 6.9
Simplified0.2
rmApplied add-cube-cbrt0.6
Applied associate-*l*0.6
Final simplification0.6
herbie shell --seed 2019128
(FPCore (x.re x.im)
:name "math.cube on complex, imaginary part"
:herbie-target
(+ (* (* x.re x.im) (* 2 x.re)) (* (* x.im (- x.re x.im)) (+ x.re x.im)))
(+ (* (- (* x.re x.re) (* x.im x.im)) x.im) (* (+ (* x.re x.im) (* x.im x.re)) x.re)))