double f(double x_re, double x_im) {
double r312150 = x_re;
double r312151 = r312150 * r312150;
double r312152 = x_im;
double r312153 = r312152 * r312152;
double r312154 = r312151 - r312153;
double r312155 = r312154 * r312152;
double r312156 = r312150 * r312152;
double r312157 = r312152 * r312150;
double r312158 = r312156 + r312157;
double r312159 = r312158 * r312150;
double r312160 = r312155 + r312159;
return r312160;
}
double f(double x_re, double x_im) {
double r312161 = x_im;
double r312162 = x_re;
double r312163 = r312161 + r312162;
double r312164 = r312162 - r312161;
double r312165 = r312163 * r312164;
double r312166 = r312162 + r312162;
double r312167 = r312162 * r312166;
double r312168 = r312165 + r312167;
double r312169 = r312161 * r312168;
return r312169;
}
\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
x.im \cdot \left(\left(x.im + x.re\right) \cdot \left(x.re - x.im\right) + x.re \cdot \left(x.re + x.re\right)\right)



Bits error versus x.re



Bits error versus x.im
Initial program 0.4
Simplified0.4
rmApplied distribute-rgt-in0.4
rmApplied distribute-rgt-out0.4
Final simplification0.4
herbie shell --seed 2019101 +o rules:numerics
(FPCore (x.re x.im)
:name "math.cube on complex, imaginary part"
(+.p16 (*.p16 (-.p16 (*.p16 x.re x.re) (*.p16 x.im x.im)) x.im) (*.p16 (+.p16 (*.p16 x.re x.im) (*.p16 x.im x.re)) x.re)))