\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.re - \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.im
{x.re}^{3} - 3 \cdot \left(x.im \cdot \left(x.re \cdot x.im\right)\right)double f(double x_re, double x_im) {
double r377049 = x_re;
double r377050 = r377049 * r377049;
double r377051 = x_im;
double r377052 = r377051 * r377051;
double r377053 = r377050 - r377052;
double r377054 = r377053 * r377049;
double r377055 = r377049 * r377051;
double r377056 = r377051 * r377049;
double r377057 = r377055 + r377056;
double r377058 = r377057 * r377051;
double r377059 = r377054 - r377058;
return r377059;
}
double f(double x_re, double x_im) {
double r377060 = x_re;
double r377061 = 3.0;
double r377062 = pow(r377060, r377061);
double r377063 = x_im;
double r377064 = r377060 * r377063;
double r377065 = r377063 * r377064;
double r377066 = r377061 * r377065;
double r377067 = r377062 - r377066;
return r377067;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 7.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2020034
(FPCore (x.re x.im)
:name "math.cube on complex, real part"
:precision binary64
:herbie-target
(+ (* (* x.re x.re) (- x.re x.im)) (* (* x.re x.im) (- x.re (* 3 x.im))))
(- (* (- (* x.re x.re) (* x.im x.im)) x.re) (* (+ (* x.re x.im) (* x.im x.re)) x.im)))