


Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -1.3368060071344819e-138Initial program 36.7
Taylor expanded around -inf 2.5
Simplified2.5
if -1.3368060071344819e-138 < y.re Initial program 26.1
Taylor expanded around -inf 29.7
Simplified29.7
Taylor expanded around -inf 18.3
Simplified18.3
Final simplification10.2
herbie shell --seed 2019007
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))
Time bar (total: 4.0m)Debug log
1 calls. Slowest were:
| 111.0ms | (* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))) |
1 alts after pruning (1 fresh and 0 done)
Merged error: 28.6b
Found 4 expressions with local error:
| 36.6b | (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re))) |
| 27.3b | (sqrt (+ (* x.re x.re) (* x.im x.im))) |
| 27.3b | (sqrt (+ (* x.re x.re) (* x.im x.im))) |
| 0.3b | (* (atan2 x.im x.re) y.im) |
4 calls. Slowest were:
| 12.0ms | (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re))) |
| 3.0ms | (* (atan2 x.im x.re) y.im) |
| 2.0ms | (sqrt (+ (* x.re x.re) (* x.im x.im))) |
4 calls. Slowest were:
| 206.0ms | (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re))) |
| 34.0ms | (sqrt (+ (* x.re x.re) (* x.im x.im))) |
| 31.0ms | (sqrt (+ (* x.re x.re) (* x.im x.im))) |
| 24.0ms | (* (atan2 x.im x.re) y.im) |
27 calls. Slowest were:
| 114.0ms | (sqrt (- (* (* x.re x.re) (* x.re x.re)) (* (* x.im x.im) (* x.im x.im)))) |
| 105.0ms | (sqrt (- (* (* x.re x.re) (* x.re x.re)) (* (* x.im x.im) (* x.im x.im)))) |
| 49.0ms | (sin (- (* (atan2 x.im x.re) y.re) (* y.im (log (/ -1 x.re))))) |
5 alts after pruning (5 fresh and 0 done)
Merged error: 10.2b
Found 4 expressions with local error:
| 36.6b | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 27.3b | (sqrt (+ (* x.re x.re) (* x.im x.im))) |
| 0.3b | (* (atan2 x.im x.re) y.im) |
| 0.2b | (* (atan2 x.im x.re) y.re) |
4 calls. Slowest were:
| 10.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 3.0ms | (* (atan2 x.im x.re) y.im) |
| 3.0ms | (* (atan2 x.im x.re) y.re) |
4 calls. Slowest were:
| 144.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 27.0ms | (sqrt (+ (* x.re x.re) (* x.im x.im))) |
| 17.0ms | (* (atan2 x.im x.re) y.re) |
| 13.0ms | (* (atan2 x.im x.re) y.im) |
23 calls. Slowest were:
| 122.0ms | (sqrt (- (* (* x.re x.re) (* x.re x.re)) (* (* x.im x.im) (* x.im x.im)))) |
| 106.0ms | (sin (- (+ (* (atan2 x.im x.re) y.re) (* y.im (log -1))) (* y.im (log (/ 1 x.re))))) |
| 70.0ms | (sin (- (* (atan2 x.im x.re) y.re) (* y.im (log (/ -1 x.re))))) |
6 alts after pruning (5 fresh and 1 done)
Merged error: 5.0b
Found 4 expressions with local error:
| 36.6b | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 0.3b | (* (atan2 x.im x.re) y.im) |
| 0.2b | (* (atan2 x.im x.re) y.re) |
| 0.2b | (* (log (- x.re)) y.re) |
4 calls. Slowest were:
| 19.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 5.0ms | (* (log (- x.re)) y.re) |
| 5.0ms | (* (atan2 x.im x.re) y.re) |
4 calls. Slowest were:
| 160.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 106.0ms | (* (log (- x.re)) y.re) |
| 25.0ms | (* (atan2 x.im x.re) y.re) |
| 23.0ms | (* (atan2 x.im x.re) y.im) |
19 calls. Slowest were:
| 90.0ms | (* -1 (* y.re (log (/ -1 x.re)))) |
| 72.0ms | (sin (- (* (atan2 x.im x.re) y.re) (* y.im (log (/ -1 x.re))))) |
| 62.0ms | (sin (- (+ (* (atan2 x.im x.re) y.re) (* y.im (log -1))) (* y.im (log (/ 1 x.re))))) |
9 alts after pruning (7 fresh and 2 done)
Merged error: 5.0b
Found 4 expressions with local error:
| 36.6b | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 36.6b | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 36.6b | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 0.7b | (cbrt (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re)))) |
4 calls. Slowest were:
| 13.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 10.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 10.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
4 calls. Slowest were:
| 195.0ms | (cbrt (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re)))) |
| 186.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 148.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
| 131.0ms | (sin (+ (* (log (- x.re)) y.im) (* (atan2 x.im x.re) y.re))) |
18 calls. Slowest were:
| 105.0ms | (pow (sin (- (+ (* (atan2 x.im x.re) y.re) (* y.im (log -1))) (* y.im (log (/ 1 x.re))))) 1/3) |
| 85.0ms | (sin (- (* (atan2 x.im x.re) y.re) (* y.im (log (/ -1 x.re))))) |
| 84.0ms | (sin (- (* (atan2 x.im x.re) y.re) (* y.im (log (/ -1 x.re))))) |
12 alts after pruning (10 fresh and 2 done)
Merged error: 4.9b
50.8% (5.3b remaining)
Error of 10.2b against oracle of 4.8b and baseline of 15.6b