Average Error: 30.6 → 0.4
Time: 2.3m
Precision: 64
Internal Precision: 128
\[e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\]
\[\begin{array}{l} \mathbf{if}\;y.re \le -34303896359318.555:\\ \;\;\;\;e^{\log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\ \mathbf{else}:\\ \;\;\;\;e^{y.re \cdot \log \left(-x.re\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\ \end{array}\]

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if y.re < -34303896359318.555

    1. Initial program 36.3

      \[e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\]
    2. Taylor expanded around 0 0

      \[\leadsto e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \color{blue}{1}\]

    if -34303896359318.555 < y.re

    1. Initial program 27.9

      \[e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\]
    2. Taylor expanded around 0 25.1

      \[\leadsto e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \color{blue}{1}\]
    3. Taylor expanded around -inf 0.5

      \[\leadsto e^{\log \color{blue}{\left(-1 \cdot x.re\right)} \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\]
    4. Simplified0.5

      \[\leadsto e^{\log \color{blue}{\left(-x.re\right)} \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.re \le -34303896359318.555:\\ \;\;\;\;e^{\log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\ \mathbf{else}:\\ \;\;\;\;e^{y.re \cdot \log \left(-x.re\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\ \end{array}\]

Reproduce

herbie shell --seed 2019021 
(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)))))

Details

Time bar (total: 2.3m)Debug log

sample4.0s

Algorithm
intervals
Results
3.8s896×body10240exit
70.0ms256×body80valid

simplify128.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
128.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))))

prune23.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 33.4b

localize399.0ms

Local error

Found 4 expressions with local error:

32.4b
(sqrt (+ (* x.re x.re) (* x.im x.im)))
32.4b
(sqrt (+ (* x.re x.re) (* x.im x.im)))
26.0b
(cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))
0.3b
(* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im)

rewrite26.0ms

Algorithm
rewrite-expression-head
Rules
add-sqr-sqrt
add-cube-cbrt
*-un-lft-identity
sqrt-prod
associate-*l*
pow1
add-log-exp
add-exp-log
sqrt-div
add-cbrt-cube
pow1/2
flip-+
log-pow
flip3-+
rem-sqrt-square
*-commutative
cos-sum
Counts
4 → 49
Calls
4 calls:
Slowest
12.0ms
(cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))
6.0ms
(sqrt (+ (* x.re x.re) (* x.im x.im)))
3.0ms
(* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im)
3.0ms
(sqrt (+ (* x.re x.re) (* x.im x.im)))

series267.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
128.0ms
(cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))
73.0ms
(* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im)
36.0ms
(sqrt (+ (* x.re x.re) (* x.im x.im)))
29.0ms
(sqrt (+ (* x.re x.re) (* x.im x.im)))

simplify553.0ms

Counts
27 → 61
Calls
27 calls:
Slowest
119.0ms
(sqrt (- (* (* x.re x.re) (* x.re x.re)) (* (* x.im x.im) (* x.im x.im))))
103.0ms
(sqrt (- (* (* x.re x.re) (* x.re x.re)) (* (* x.im x.im) (* x.im x.im))))
71.0ms
(cos (- (* (atan2 x.im x.re) y.re) (* y.im (log (/ -1 x.re)))))
56.0ms
(* -1 (* y.im (log (/ 1 x.re))))
50.0ms
(* -1 (* y.im (log (/ -1 x.re))))

prune915.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 17.4b

localize8.0ms

Local error

Found 4 expressions with local error:

32.4b
(sqrt (+ (* x.re x.re) (* x.im x.im)))
0.2b
(* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re)
0.2b
(* (atan2 x.im x.re) y.im)
0.0b
(- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))

rewrite16.0ms

Algorithm
rewrite-expression-head
Rules
associate-*l*
add-sqr-sqrt
add-cube-cbrt
*-un-lft-identity
add-log-exp
pow1
add-exp-log
add-cbrt-cube
sqrt-prod
*-commutative
log-pow
sqrt-div
pow1/2
flip--
flip-+
diff-log
flip3--
flip3-+
sub-neg
rem-sqrt-square
Counts
4 → 50
Calls
4 calls:
Slowest
6.0ms
(* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re)
4.0ms
(- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))
3.0ms
(sqrt (+ (* x.re x.re) (* x.im x.im)))
2.0ms
(* (atan2 x.im x.re) y.im)

series251.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
140.0ms
(- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))
71.0ms
(* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re)
20.0ms
(sqrt (+ (* x.re x.re) (* x.im x.im)))
20.0ms
(* (atan2 x.im x.re) y.im)

simplify474.0ms

Counts
23 → 62
Calls
23 calls:
Slowest
95.0ms
(sqrt (- (* (* x.re x.re) (* x.re x.re)) (* (* x.im x.im) (* x.im x.im))))
90.0ms
(* -1 (* y.re (log (/ -1 x.re))))
72.0ms
(- (+ (* y.re (log (/ -1 x.re))) (* y.im (atan2 x.im x.re))))
53.0ms
(* -1 (* y.re (log (/ 1 x.re))))
46.0ms
(- (+ (* y.im (atan2 x.im x.re)) (* y.re (log (/ 1 x.re)))))

prune850.0ms

Pruning

3 alts after pruning (2 fresh and 1 done)

Merged error: 0b

localize17.0ms

Local error

Found 3 expressions with local error:

0.2b
(* (log (- x.re)) y.re)
0.2b
(* (atan2 x.im x.re) y.im)
0.0b
(- (* (log (- x.re)) y.re) (* (atan2 x.im x.re) y.im))

rewrite10.0ms

Algorithm
rewrite-expression-head
Rules
associate-*l*
add-log-exp
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
pow1
add-exp-log
add-cbrt-cube
*-commutative
flip--
log-pow
diff-log
flip3--
sub-neg
Counts
3 → 35
Calls
3 calls:
Slowest
4.0ms
(- (* (log (- x.re)) y.re) (* (atan2 x.im x.re) y.im))
3.0ms
(* (log (- x.re)) y.re)
2.0ms
(* (atan2 x.im x.re) y.im)

series244.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
135.0ms
(- (* (log (- x.re)) y.re) (* (atan2 x.im x.re) y.im))
86.0ms
(* (log (- x.re)) y.re)
23.0ms
(* (atan2 x.im x.re) y.im)

simplify381.0ms

Counts
14 → 44
Calls
14 calls:
Slowest
97.0ms
(- (+ (* y.re (log (/ -1 x.re))) (* y.im (atan2 x.im x.re))))
88.0ms
(- (* y.re (log -1)) (+ (* y.im (atan2 x.im x.re)) (* y.re (log (/ 1 x.re)))))
68.0ms
(* -1 (* y.re (log (/ -1 x.re))))
43.0ms
(- (+ (* y.re (log -1)) (* y.re (log x.re))) (* y.im (atan2 x.im x.re)))
37.0ms
(/ (exp (* (log (- x.re)) y.re)) (exp (* (atan2 x.im x.re) y.im)))

prune496.0ms

Pruning

3 alts after pruning (1 fresh and 2 done)

Merged error: 0b

localize13.0ms

Local error

Found 3 expressions with local error:

0.2b
(* (atan2 x.im x.re) y.im)
0.1b
(* y.re (log x.im))
0.0b
(- (* y.re (log x.im)) (* (atan2 x.im x.re) y.im))

rewrite7.0ms

Algorithm
rewrite-expression-head
Rules
add-log-exp
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
add-exp-log
associate-*l*
associate-*r*
add-cbrt-cube
pow1
*-commutative
flip--
diff-log
flip3--
sub-neg
Counts
3 → 34
Calls
3 calls:
Slowest
3.0ms
(- (* y.re (log x.im)) (* (atan2 x.im x.re) y.im))
2.0ms
(* (atan2 x.im x.re) y.im)
1.0ms
(* y.re (log x.im))

series166.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
106.0ms
(- (* y.re (log x.im)) (* (atan2 x.im x.re) y.im))
42.0ms
(* y.re (log x.im))
17.0ms
(* (atan2 x.im x.re) y.im)

simplify417.0ms

Counts
15 → 43
Calls
15 calls:
Slowest
180.0ms
(- (* y.re (log -1)) (+ (* y.re (log (/ -1 x.im))) (* y.im (atan2 x.im x.re))))
76.0ms
(* -1 (* y.re (log (/ 1 x.im))))
66.0ms
(* y.re (- (log -1) (log (/ -1 x.im))))
48.0ms
(- (+ (* y.re (log (/ 1 x.im))) (* y.im (atan2 x.im x.re))))
27.0ms
(/ (exp (* y.re (log x.im))) (exp (* (atan2 x.im x.re) y.im)))

prune526.0ms

Pruning

3 alts after pruning (0 fresh and 3 done)

Merged error: 0b

regimes259.0ms

Accuracy

95.4% (0.3b remaining)

Error of 0.4b against oracle of 0.0b and baseline of 7.0b

bsearch1.7s

end0.0ms

sample2.1m

Algorithm
intervals
Results
2.0m30297×body10240exit
3.1s8001×body80valid