Average Error: 0.0 → 0.0
Time: 7.3s
Precision: 64
Internal Precision: 128
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]

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. Initial program 0.0

    \[x.re \cdot y.im + x.im \cdot y.re\]
  2. Final simplification0.0

    \[\leadsto x.im \cdot y.re + x.re \cdot y.im\]

Reproduce

herbie shell --seed 2019021 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))

Details

Time bar (total: 6.9s)Debug log

sample44.0ms

Algorithm
intervals
Results
32.0ms337×body80valid

simplify3.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
3.0ms
(+ (* x.re y.im) (* x.im y.re))

prune5.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 0.0b

localize9.0ms

Local error

Found 1 expressions with local error:

0.0b
(+ (* x.re y.im) (* x.im y.re))

rewrite3.0ms

Algorithm
rewrite-expression-head
Rules
add-log-exp
flip-+
add-cube-cbrt
add-exp-log
add-cbrt-cube
flip3-+
*-un-lft-identity
sum-log
+-commutative
pow1
add-sqr-sqrt
Counts
1 → 11
Calls
1 calls:
Slowest
2.0ms
(+ (* x.re y.im) (* x.im y.re))

series25.0ms

Counts
1 → 3
Calls
1 calls:
Slowest
25.0ms
(+ (* x.re y.im) (* x.im y.re))

simplify12.0ms

Counts
4 → 14
Calls
4 calls:
Slowest
6.0ms
(* (exp (* x.re y.im)) (exp (* x.im y.re)))
2.0ms
(+ (* y.re x.im) (* y.im x.re))
2.0ms
(+ (* y.re x.im) (* y.im x.re))
0.0ms
0

prune118.0ms

Pruning

2 alts after pruning (1 fresh and 1 done)

Merged error: 0.0b

localize5.0ms

Local error

Found 4 expressions with local error:

0.8b
(sqrt (+ (* x.re y.im) (* x.im y.re)))
0.8b
(sqrt (+ (* x.re y.im) (* x.im y.re)))
0.2b
(* (sqrt (+ (* x.re y.im) (* x.im y.re))) (sqrt (+ (* x.re y.im) (* x.im y.re))))
0.0b
(+ (* x.re y.im) (* x.im y.re))

rewrite20.0ms

Algorithm
rewrite-expression-head
Rules
16×sqrt-div
12×sqrt-prod
12×add-sqr-sqrt
10×add-cube-cbrt
10×*-un-lft-identity
flip-+
flip3-+
pow1
add-log-exp
add-exp-log
associate-*l*
associate-*r*
pow1/2
add-cbrt-cube
frac-times
pow-prod-up
associate-*r/
associate-*l/
pow-prod-down
rem-sqrt-square
cbrt-unprod
*-commutative
prod-exp
sqrt-unprod
pow-plus
rem-square-sqrt
sum-log
+-commutative
pow2
Counts
4 → 77
Calls
4 calls:
Slowest
14.0ms
(* (sqrt (+ (* x.re y.im) (* x.im y.re))) (sqrt (+ (* x.re y.im) (* x.im y.re))))
2.0ms
(+ (* x.re y.im) (* x.im y.re))
2.0ms
(sqrt (+ (* x.re y.im) (* x.im y.re)))
2.0ms
(sqrt (+ (* x.re y.im) (* x.im y.re)))

series171.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
47.0ms
(sqrt (+ (* x.re y.im) (* x.im y.re)))
45.0ms
(sqrt (+ (* x.re y.im) (* x.im y.re)))
40.0ms
(+ (* x.re y.im) (* x.im y.re))
38.0ms
(* (sqrt (+ (* x.re y.im) (* x.im y.re))) (sqrt (+ (* x.re y.im) (* x.im y.re))))

simplify4.1s

Counts
60 → 89
Calls
60 calls:
Slowest
354.0ms
(* (sqrt (+ (pow (* x.re y.im) 3) (pow (* x.im y.re) 3))) (sqrt (- (* (* x.re y.im) (* x.re y.im)) (* (* x.im y.re) (* x.im y.re)))))
351.0ms
(* (sqrt (+ (* (* x.re y.im) (* x.re y.im)) (- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.im y.re))))) (sqrt (- (* x.re y.im) (* x.im y.re))))
341.0ms
(* (sqrt (- (* (* x.re y.im) (* x.re y.im)) (* (* x.im y.re) (* x.im y.re)))) (sqrt (+ (pow (* x.re y.im) 3) (pow (* x.im y.re) 3))))
334.0ms
(* (sqrt (- (* x.re y.im) (* x.im y.re))) (sqrt (+ (* (* x.re y.im) (* x.re y.im)) (- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.im y.re))))))
313.0ms
(* (sqrt (+ (* (* x.re y.im) (* x.re y.im)) (- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.im y.re))))) (sqrt (+ (* (* x.re y.im) (* x.re y.im)) (- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.im y.re))))))

prune935.0ms

Pruning

2 alts after pruning (0 fresh and 2 done)

Merged error: 0.0b

regimes295.0ms

Accuracy

0% (0.0b remaining)

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

bsearch1.0ms

end0.0ms

sample1.2s

Algorithm
intervals
Results
1.0s10475×body80valid