


Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if x.re < -2.8299828101670785e+24Initial program 41.7
Simplified5.1
rmApplied add-exp-log5.1
Applied pow-exp5.1
Applied pow-exp5.1
Applied div-exp0.1
Applied add-exp-log14.8
Applied div-exp14.8
rmApplied fma-udef14.8
Applied cos-sum14.6
Taylor expanded around 0 4.9
if -2.8299828101670785e+24 < x.re Initial program 21.9
Simplified4.1
Final simplification4.5
herbie shell --seed 2019010 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))
Time bar (total: 2.7m)Debug log
| 118.0ms | (* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))) |
2 alts after pruning (2 fresh and 0 done)
Merged error: 1.5b
Found 4 expressions with local error:
| 22.5b | (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) |
| 0.2b | (* (atan2 x.im x.re) y.re) |
| 0.1b | (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)) |
| 0.0b | (/ (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) (/ (pow (exp y.im) (atan2 x.im x.re)) (pow (hypot x.re x.im) y.re))) |
| 264× | times-frac |
| 146× | add-cube-cbrt |
| 146× | *-un-lft-identity |
| 146× | add-sqr-sqrt |
| 144× | unpow-prod-down |
| 40× | associate-/r* |
| 24× | add-exp-log |
| 19× | div-exp |
| 9× | add-cbrt-cube |
| 6× | pow-exp |
| 6× | pow-to-exp |
| 5× | div-inv |
| 4× | add-log-exp |
| 4× | log1p-expm1-u |
| 4× | pow1 |
| 4× | expm1-log1p-u |
| 3× | associate-/l* |
| 3× | fma-udef |
| 3× | associate-*l* |
| 3× | cbrt-undiv |
| 2× | cos-sum |
| 1× | *-commutative |
| 1× | associate-/r/ |
| 1× | div-sub |
| 1× | frac-2neg |
| 1× | clear-num |
| 20.0ms | (/ (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) (/ (pow (exp y.im) (atan2 x.im x.re)) (pow (hypot x.re x.im) y.re))) |
| 15.0ms | (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) |
| 5.0ms | (* (atan2 x.im x.re) y.re) |
| 0.0ms | (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)) |
| 236.0ms | (/ (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) (/ (pow (exp y.im) (atan2 x.im x.re)) (pow (hypot x.re x.im) y.re))) |
| 162.0ms | (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)) |
| 160.0ms | (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) |
| 15.0ms | (* (atan2 x.im x.re) y.re) |
| 360.0ms | (/ (* (* (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)))) (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)))) (/ (* (* (pow (exp y.im) (atan2 x.im x.re)) (pow (exp y.im) (atan2 x.im x.re))) (pow (exp y.im) (atan2 x.im x.re))) (* (* (pow (hypot x.re x.im) y.re) (pow (hypot x.re x.im) y.re)) (pow (hypot x.re x.im) y.re)))) |
| 355.0ms | (/ (* (cbrt (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)))) (cbrt (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))))) (/ (* (cbrt (pow (exp y.im) (atan2 x.im x.re))) (cbrt (pow (exp y.im) (atan2 x.im x.re)))) (* (cbrt (pow (hypot x.re x.im) y.re)) (cbrt (pow (hypot x.re x.im) y.re))))) |
| 293.0ms | (/ (* (cbrt (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)))) (cbrt (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))))) (/ (* (cbrt (pow (exp y.im) (atan2 x.im x.re))) (cbrt (pow (exp y.im) (atan2 x.im x.re)))) (pow 1 y.re))) |
| 220.0ms | (/ (* (cos (- (* (atan2 x.im x.re) y.re) (* y.im (log (/ 1 x.re))))) (exp (* -1 (* y.re (log (/ 1 x.re)))))) (exp (* y.im (atan2 x.im x.re)))) |
| 213.0ms | (/ (* (* (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)))) (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)))) (* (* (/ (pow (exp y.im) (atan2 x.im x.re)) (pow (hypot x.re x.im) y.re)) (/ (pow (exp y.im) (atan2 x.im x.re)) (pow (hypot x.re x.im) y.re))) (/ (pow (exp y.im) (atan2 x.im x.re)) (pow (hypot x.re x.im) y.re)))) |
5 alts after pruning (4 fresh and 1 done)
Merged error: 1.0b
Found 4 expressions with local error:
| 22.6b | (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re)))) |
| 0.2b | (* y.re (atan2 x.im x.re)) |
| 0.1b | (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re))) |
| 0.0b | (/ (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re)))) (* (pow (/ -1 x.re) y.re) (pow (exp y.im) (atan2 x.im x.re)))) |
| 24× | add-exp-log |
| 10× | div-exp |
| 9× | prod-exp |
| 9× | add-cbrt-cube |
| 7× | add-cube-cbrt |
| 7× | *-un-lft-identity |
| 7× | add-sqr-sqrt |
| 6× | pow-exp |
| 6× | pow-to-exp |
| 4× | add-log-exp |
| 4× | log1p-expm1-u |
| 4× | pow1 |
| 4× | expm1-log1p-u |
| 3× | associate-/l* |
| 3× | fma-udef |
| 3× | associate-*r* |
| 3× | times-frac |
| 2× | cos-sum |
| 2× | cbrt-undiv |
| 1× | div-inv |
| 1× | cbrt-unprod |
| 1× | *-commutative |
| 1× | div-sub |
| 1× | frac-2neg |
| 1× | associate-/r* |
| 1× | clear-num |
| 20.0ms | (/ (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re)))) (* (pow (/ -1 x.re) y.re) (pow (exp y.im) (atan2 x.im x.re)))) |
| 4.0ms | (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re)))) |
| 2.0ms | (* y.re (atan2 x.im x.re)) |
| 0.0ms | (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re))) |
| 237.0ms | (/ (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re)))) (* (pow (/ -1 x.re) y.re) (pow (exp y.im) (atan2 x.im x.re)))) |
| 139.0ms | (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re)))) |
| 105.0ms | (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re))) |
| 14.0ms | (* y.re (atan2 x.im x.re)) |
| 670.0ms | (/ (* (* (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re)))) (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re))))) (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re))))) (* (* (* (pow (/ -1 x.re) y.re) (pow (exp y.im) (atan2 x.im x.re))) (* (pow (/ -1 x.re) y.re) (pow (exp y.im) (atan2 x.im x.re)))) (* (pow (/ -1 x.re) y.re) (pow (exp y.im) (atan2 x.im x.re))))) |
| 374.0ms | (- (log (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re))))) (+ (log (pow (/ -1 x.re) y.re)) (* (log (exp y.im)) (atan2 x.im x.re)))) |
| 373.0ms | (cos (- (* (atan2 x.im x.re) y.re) (+ (* y.im (log -1)) (* y.im (log (/ 1 x.re)))))) |
| 361.0ms | (- (log (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re))))) (+ (log (pow (/ -1 x.re) y.re)) (* y.im (atan2 x.im x.re)))) |
| 355.0ms | (- (log (cos (fma (- y.im) (log (/ -1 x.re)) (* y.re (atan2 x.im x.re))))) (+ (* (log (/ -1 x.re)) y.re) (* (log (exp y.im)) (atan2 x.im x.re)))) |
5 alts after pruning (3 fresh and 2 done)
Merged error: 1.0b
Found 4 expressions with local error:
| 22.5b | (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) |
| 3.8b | (log (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)))) |
| 0.3b | (* (log (hypot x.re x.im)) y.re) |
| 0.3b | (* y.im (atan2 x.im x.re)) |
| 7× | add-cube-cbrt |
| 7× | *-un-lft-identity |
| 7× | add-sqr-sqrt |
| 6× | pow1 |
| 5× | add-exp-log |
| 4× | add-log-exp |
| 4× | log1p-expm1-u |
| 4× | associate-*l* |
| 4× | add-cbrt-cube |
| 4× | expm1-log1p-u |
| 3× | associate-*r* |
| 3× | log-prod |
| 2× | *-commutative |
| 2× | log-pow |
| 1× | fma-udef |
| 1× | rem-log-exp |
| 1× | cos-sum |
| 3.0ms | (* (log (hypot x.re x.im)) y.re) |
| 2.0ms | (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) |
| 2.0ms | (log (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)))) |
| 1.0ms | (* y.im (atan2 x.im x.re)) |
| 203.0ms | (log (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re)))) |
| 160.0ms | (cos (fma y.im (log (hypot x.re x.im)) (* (atan2 x.im x.re) y.re))) |
| 113.0ms | (* (log (hypot x.re x.im)) y.re) |
| 8.0ms | (* y.im (atan2 x.im x.re)) |
| 288.0ms | (- (+ (* y.im (* (atan2 x.im x.re) (* y.re (log x.im)))) (+ (* 1/2 (* (pow (atan2 x.im x.re) 2) (pow y.re 2))) (* 1/2 (* (pow y.im 2) (pow (log x.im) 2)))))) |
| 170.0ms | (- 1 (+ (* y.im (* (atan2 x.im x.re) (* y.re (log x.im)))) (* 1/2 (* (pow y.im 2) (pow (log x.im) 2))))) |
| 118.0ms | (* -1 (* y.re (log (/ -1 x.re)))) |
| 109.0ms | (log (cos (- (* (atan2 x.im x.re) y.re) (* y.im (log (/ -1 x.re)))))) |
| 77.0ms | (cos (- (* (atan2 x.im x.re) y.re) (* y.im (log (/ -1 x.re))))) |
3 alts after pruning (2 fresh and 1 done)
Merged error: 0.5b
Found 4 expressions with local error:
| 22.8b | (cos (* (atan2 x.im x.re) y.re)) |
| 22.4b | (sin (* (atan2 x.im x.re) y.re)) |
| 6.7b | (cos (* y.im (log (hypot x.re x.im)))) |
| 6.5b | (sin (* y.im (log (hypot x.re x.im)))) |
| 12× | log-prod |
| 8× | add-cube-cbrt |
| 8× | *-un-lft-identity |
| 8× | add-sqr-sqrt |
| 6× | sin-sum |
| 6× | distribute-lft-in |
| 6× | cos-sum |
| 6× | distribute-rgt-in |
| 4× | add-log-exp |
| 4× | log1p-expm1-u |
| 4× | add-exp-log |
| 4× | add-cbrt-cube |
| 4× | pow1 |
| 4× | expm1-log1p-u |
| 4.0ms | (cos (* (atan2 x.im x.re) y.re)) |
| 4.0ms | (sin (* (atan2 x.im x.re) y.re)) |
| 4.0ms | (sin (* y.im (log (hypot x.re x.im)))) |
| 4.0ms | (cos (* y.im (log (hypot x.re x.im)))) |
| 110.0ms | (cos (* y.im (log (hypot x.re x.im)))) |
| 105.0ms | (sin (* y.im (log (hypot x.re x.im)))) |
| 45.0ms | (sin (* (atan2 x.im x.re) y.re)) |
| 40.0ms | (cos (* (atan2 x.im x.re) y.re)) |
| 289.0ms | (- 1 (* 1/2 (* (pow y.im 2) (pow (log x.im) 2)))) |
| 105.0ms | (cos (* -1 (* y.im (log (/ -1 x.re))))) |
| 75.0ms | (sin (* -1 (* y.im (log (/ 1 x.re))))) |
| 67.0ms | (sin (* -1 (* y.im (log (/ -1 x.re))))) |
| 64.0ms | (cos (* -1 (* y.im (log (/ 1 x.re))))) |
3 alts after pruning (1 fresh and 2 done)
Merged error: 0.2b
7.7% (2.9b remaining)
Error of 4.5b against oracle of 1.6b and baseline of 4.7b