Average Error: 7.3 → 0.2
Time: 4.7s
Precision: binary64
Cost: 7040
\[\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.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right) - {x.im}^{3}\]
\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.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right) - {x.im}^{3}
(FPCore (x.re x.im)
 :precision binary64
 (+
  (* (- (* x.re x.re) (* x.im x.im)) x.im)
  (* (+ (* x.re x.im) (* x.im x.re)) x.re)))
(FPCore (x.re x.im)
 :precision binary64
 (- (* x.re (* x.re (* x.im 3.0))) (pow x.im 3.0)))
double code(double x_46_re, double x_46_im) {
	return (((x_46_re * x_46_re) - (x_46_im * x_46_im)) * x_46_im) + (((x_46_re * x_46_im) + (x_46_im * x_46_re)) * x_46_re);
}
double code(double x_46_re, double x_46_im) {
	return (x_46_re * (x_46_re * (x_46_im * 3.0))) - pow(x_46_im, 3.0);
}

Error

Bits error versus x.re

Bits error versus x.im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original7.3
Target0.2
Herbie0.2
\[\left(x.re \cdot x.im\right) \cdot \left(2 \cdot x.re\right) + \left(x.im \cdot \left(x.re - x.im\right)\right) \cdot \left(x.re + x.im\right)\]

Alternatives

Alternative 1
Error23.1
Cost33024
\[\sqrt{{x.re}^{2} \cdot \left(x.im \cdot 3\right)} \cdot \sqrt{{x.re}^{2} \cdot \left(x.im \cdot 3\right)} - {x.im}^{3}\]
Alternative 2
Error0.6
Cost27008
\[x.re \cdot \left(\sqrt[3]{\left(x.re \cdot x.im\right) \cdot 3} \cdot \left(\sqrt[3]{\left(x.re \cdot x.im\right) \cdot 3} \cdot \sqrt[3]{\left(x.re \cdot x.im\right) \cdot 3}\right)\right) - {x.im}^{3}\]
Alternative 3
Error0.6
Cost26496
\[\left(\sqrt[3]{x.re} \cdot \sqrt[3]{x.re}\right) \cdot \left(\sqrt[3]{x.re} \cdot \left(\left(x.re \cdot x.im\right) \cdot 3\right)\right) - {x.im}^{3}\]
Alternative 4
Error0.2
Cost26496
\[x.re \cdot \left(\sqrt[3]{3} \cdot \left(\left(x.re \cdot x.im\right) \cdot \left(\sqrt[3]{3} \cdot \sqrt[3]{3}\right)\right)\right) - {x.im}^{3}\]
Alternative 5
Error0.6
Cost26496
\[\left(\sqrt[3]{x.re} \cdot \sqrt[3]{x.re}\right) \cdot \left(x.re \cdot \left(\sqrt[3]{x.re} \cdot \left(x.im \cdot 3\right)\right)\right) - {x.im}^{3}\]
Alternative 6
Error26.7
Cost20224
\[x.re \cdot \left(\sqrt{\left(x.re \cdot x.im\right) \cdot 3} \cdot \sqrt{\left(x.re \cdot x.im\right) \cdot 3}\right) - {x.im}^{3}\]
Alternative 7
Error0.3
Cost19968
\[x.re \cdot \left(\sqrt{3} \cdot \left(\left(x.re \cdot x.im\right) \cdot \sqrt{3}\right)\right) - {x.im}^{3}\]
Alternative 8
Error32.3
Cost19968
\[\sqrt{x.re} \cdot \left(\left(\left(x.re \cdot x.im\right) \cdot 3\right) \cdot \sqrt{x.re}\right) - {x.im}^{3}\]
Alternative 9
Error13.5
Cost19904
\[x.re \cdot \sqrt[3]{{\left(\left(x.re \cdot x.im\right) \cdot 3\right)}^{3}} - {x.im}^{3}\]
Alternative 10
Error33.9
Cost19904
\[\sqrt{x.re} \cdot \left(\left(x.im \cdot 3\right) \cdot {x.re}^{1.5}\right) - {x.im}^{3}\]
Alternative 11
Error7.2
Cost13376
\[{x.re}^{2} \cdot \left(x.im \cdot 3\right) - {x.im}^{3}\]
Alternative 12
Error7.3
Cost13376
\[3 \cdot \left(x.im \cdot {x.re}^{2}\right) - {x.im}^{3}\]
Alternative 13
Error0.2
Cost7040
\[x.re \cdot \left(\left(x.re \cdot x.im\right) \cdot 3\right) - {x.im}^{3}\]
Alternative 14
Error26.3
Cost6784
\[{x.re}^{2} \cdot \left(x.im \cdot 3\right)\]
Alternative 15
Error28.2
Cost6592
\[-{x.im}^{3}\]
Alternative 16
Error7.3
Cost1216
\[x.im \cdot \left(x.re \cdot x.re - x.im \cdot x.im\right) + x.re \cdot \left(x.re \cdot x.im + x.re \cdot x.im\right)\]
Alternative 17
Error61.9
Cost64
\[1\]
Alternative 18
Error46.7
Cost64
\[0\]
Alternative 19
Error61.8
Cost64
\[-1\]

Error

Derivation

  1. Initial program 7.3

    \[\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\]
  2. Simplified0.2

    \[\leadsto \color{blue}{x.re \cdot \left(\left(x.re \cdot x.im\right) \cdot 3\right) - {x.im}^{3}}\]
  3. Using strategy rm
  4. Applied associate-*l*_binary64_26760.2

    \[\leadsto x.re \cdot \color{blue}{\left(x.re \cdot \left(x.im \cdot 3\right)\right)} - {x.im}^{3}\]
  5. Simplified0.2

    \[\leadsto \color{blue}{x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right) - {x.im}^{3}}\]
  6. Final simplification0.2

    \[\leadsto x.re \cdot \left(x.re \cdot \left(x.im \cdot 3\right)\right) - {x.im}^{3}\]

Reproduce

herbie shell --seed 2021042 
(FPCore (x.re x.im)
  :name "math.cube on complex, imaginary part"
  :precision binary64

  :herbie-target
  (+ (* (* x.re x.im) (* 2.0 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)))