math.abs on complex (squared)

Time bar (total: 2.3s)

analyze0.0ms (0%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%99.9%0.1%0%0%0%0
100%99.9%0%0.1%0%0%0%1
Compiler

Compiled 10 to 6 computations (40% saved)

Precisions
Click to see histograms. Total time spent on operations: 0.0ms
ival-add: 0.0ms (0% of total)
ival-mult: 0.0ms (0% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

sample692.0ms (30.4%)

Results
514.0ms8256×0valid
Precisions
Click to see histograms. Total time spent on operations: 196.0ms
ival-mult: 147.0ms (75% of total)
ival-add: 39.0ms (19.9% of total)
const: 8.0ms (4.1% of total)
backward-pass: 3.0ms (1.5% of total)
Bogosity

preprocess21.0ms (0.9%)

Algorithm
egg-herbie
Rules
164×fnmsub-define
164×fmsub-define
164×fnmadd-define
128×fmm-def
100×sum3-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01432
14432
210130
327930
455030
568330
670730
055
195
2105
0105
Stop Event
iter limit
saturated
saturated
Calls
Call 1
Inputs
(+ (* re re) (* im im))
Outputs
(+ (* re re) (* im im))
(+.f64 (*.f64 re re) (*.f64 im im))
Call 2
Inputs
(+ (* re re) (* im im))
(+ (* (neg re) (neg re)) (* im im))
(+ (* re re) (* (neg im) (neg im)))
(neg (+ (* (neg re) (neg re)) (* im im)))
(neg (+ (* re re) (* (neg im) (neg im))))
(+ (* im im) (* re re))
Outputs
(+ (* re re) (* im im))
(fma im im (square re))
(+ (* (neg re) (neg re)) (* im im))
(fma im im (square re))
(+ (* re re) (* (neg im) (neg im)))
(fma im im (square re))
(neg (+ (* (neg re) (neg re)) (* im im)))
(fnmsub re re (square im))
(neg (+ (* re re) (* (neg im) (neg im))))
(fnmsub re re (square im))
(+ (* im im) (* re re))
(fma im im (square re))
Symmetry

(abs re)

(abs im)

(sort re im)

explain62.0ms (2.7%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
00-0-im
00-0-(*.f64 im im)
00-0-(*.f64 re re)
00-0-re
00-0-(+.f64 (*.f64 re re) (*.f64 im im))
Results
43.0ms512×0valid
Compiler

Compiled 45 to 17 computations (62.2% saved)

Precisions
Click to see histograms. Total time spent on operations: 12.0ms
ival-mult: 9.0ms (76.4% of total)
ival-add: 2.0ms (17% of total)
const: 1.0ms (8.5% of total)
backward-pass: 0.0ms (0% of total)

eval0.0ms (0%)

Compiler

Compiled 9 to 5 computations (44.4% saved)

prune1.0ms (0%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(+.f64 (*.f64 re re) (*.f64 im im))
Compiler

Compiled 9 to 5 computations (44.4% saved)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 im im)
cost-diff0
(*.f64 re re)
cost-diff0
(+.f64 (*.f64 re re) (*.f64 im im))
Rules
fma-lowering-fma.f32
fma-define
+-lowering-+.f64
*-lowering-*.f32
*-lowering-*.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0511
1911
21011
01011
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(+ (* re re) (* im im))
(* re re)
re
(* im im)
im
Outputs
(+ (* re re) (* im im))
(+.f64 (*.f64 re re) (*.f64 im im))
(* re re)
(*.f64 re re)
re
(* im im)
(*.f64 im im)
im

localize27.0ms (1.2%)

Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 re re)
accuracy100.0%
(*.f64 im im)
accuracy100.0%
(+.f64 (*.f64 re re) (*.f64 im im))
Results
20.0ms256×0valid
Compiler

Compiled 18 to 6 computations (66.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 7.0ms
ival-mult: 6.0ms (80.7% of total)
ival-add: 1.0ms (13.5% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

series2.0ms (0.1%)

Counts
3 → 48
Calls
Call 1
Inputs
#<alt (+ (* re re) (* im im))>
#<alt (* re re)>
#<alt (* im im)>
Outputs
#<alt (pow im 2)>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (pow re 2)>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (pow re 2)>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (pow re 2)>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (pow im 2)>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (pow im 2)>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
Calls

12 calls:

TimeVariablePointExpression
0.0ms
re
@0
(+ (* re re) (* im im))
0.0ms
re
@inf
(+ (* re re) (* im im))
0.0ms
im
@0
(+ (* re re) (* im im))
0.0ms
im
@inf
(+ (* re re) (* im im))
0.0ms
re
@-inf
(+ (* re re) (* im im))

rewrite26.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
12×pow-to-exp
12×exp-prod
12×*-lowering-*.f32
12×*-lowering-*.f64
10×exp-lowering-exp.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
059
1129
2199
3279
4449
5519
6569
0569
Stop Event
iter limit
saturated
Counts
3 → 12
Calls
Call 1
Inputs
(+ (* re re) (* im im))
(* re re)
(* im im)
Outputs
(+.f64 (*.f64 re re) (*.f64 im im))
(+.f64 (*.f64 im im) (*.f64 re re))
(fma.f64 re re (*.f64 im im))
(fma.f64 im im (*.f64 re re))
(exp.f64 (*.f64 #s(literal 2 binary64) (log.f64 re)))
(pow.f64 re #s(literal 2 binary64))
(pow.f64 (exp.f64 #s(literal 2 binary64)) (log.f64 re))
(*.f64 re re)
(exp.f64 (*.f64 #s(literal 2 binary64) (log.f64 im)))
(pow.f64 im #s(literal 2 binary64))
(pow.f64 (exp.f64 #s(literal 2 binary64)) (log.f64 im))
(*.f64 im im)

simplify367.0ms (16.1%)

Algorithm
egg-herbie
Rules
6730×*-lowering-*.f32
6730×*-lowering-*.f64
3558×cube-prod
2910×/-lowering-/.f32
2910×/-lowering-/.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
013216
134150
294150
3373150
41028150
52078150
62395150
72729150
83443150
94060150
104979150
116010150
126585150
136723150
146723150
156723150
167419150
08236150
Stop Event
iter limit
node limit
Counts
48 → 48
Calls
Call 1
Inputs
(pow im 2)
(+ (pow im 2) (pow re 2))
(+ (pow im 2) (pow re 2))
(+ (pow im 2) (pow re 2))
(pow re 2)
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(pow re 2)
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(pow re 2)
(+ (pow im 2) (pow re 2))
(+ (pow im 2) (pow re 2))
(+ (pow im 2) (pow re 2))
(pow im 2)
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(pow im 2)
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
Outputs
(pow im 2)
(*.f64 im im)
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow re 2)
(*.f64 re re)
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow re 2)
(*.f64 re re)
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow re 2)
(*.f64 re re)
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow im 2)
(*.f64 im im)
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow im 2)
(*.f64 im im)
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)

eval5.0ms (0.2%)

Compiler

Compiled 404 to 26 computations (93.6% saved)

prune3.0ms (0.1%)

Pruning

3 alts after pruning (2 fresh and 1 done)

PrunedKeptTotal
New58260
Fresh000
Picked011
Done000
Total58361
Accuracy
100.0%
Counts
61 → 3
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(fma.f64 im im (*.f64 re re))
100.0%
(+.f64 (*.f64 re re) (*.f64 im im))
99.3%
(*.f64 im im)
Compiler

Compiled 22 to 12 computations (45.5% saved)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 re re)
cost-diff6272
(fma.f64 im im (*.f64 re re))
cost-diff0
(*.f64 im im)
Rules
fma-lowering-fma.f32
fma-define
+-lowering-+.f64
*-lowering-*.f32
*-lowering-*.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0512
1912
21012
01012
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* im im)
im
(+ (* im im) (* re re))
im
(* re re)
re
Outputs
(* im im)
(*.f64 im im)
im
(+ (* im im) (* re re))
(+.f64 (*.f64 im im) (*.f64 re re))
im
(* re re)
(*.f64 re re)
re

localize57.0ms (2.5%)

Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(fma.f64 im im (*.f64 re re))
accuracy100.0%
(*.f64 re re)
accuracy100.0%
(*.f64 im im)
Results
43.0ms256×0valid
Compiler

Compiled 18 to 6 computations (66.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 32.0ms
ival-mult: 27.0ms (84.5% of total)
compiled-spec: 3.0ms (9.4% of total)
ival-add: 1.0ms (3.1% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

series1.0ms (0%)

Counts
3 → 48
Calls
Call 1
Inputs
#<alt (* im im)>
#<alt (+ (* im im) (* re re))>
#<alt (* re re)>
Outputs
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow im 2)>
#<alt (pow re 2)>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (pow im 2)>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (pow im 2)>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))>
#<alt (pow im 2)>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (+ (pow im 2) (pow re 2))>
#<alt (pow re 2)>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (pow re 2)>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
#<alt (pow re 2)>
Calls

12 calls:

TimeVariablePointExpression
0.0ms
im
@inf
(+ (* im im) (* re re))
0.0ms
im
@0
(* im im)
0.0ms
re
@inf
(+ (* im im) (* re re))
0.0ms
im
@0
(+ (* im im) (* re re))
0.0ms
re
@-inf
(+ (* im im) (* re re))

rewrite13.0ms (0.6%)

Algorithm
batch-egg-rewrite
Rules
12×pow-to-exp
12×exp-prod
12×*-lowering-*.f32
12×*-lowering-*.f64
10×exp-lowering-exp.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
059
1129
2199
3279
4449
5519
6569
0569
Stop Event
iter limit
saturated
Counts
3 → 12
Calls
Call 1
Inputs
(* im im)
(+ (* im im) (* re re))
(* re re)
Outputs
(exp.f64 (*.f64 #s(literal 2 binary64) (log.f64 im)))
(pow.f64 im #s(literal 2 binary64))
(pow.f64 (exp.f64 #s(literal 2 binary64)) (log.f64 im))
(*.f64 im im)
(+.f64 (*.f64 im im) (*.f64 re re))
(+.f64 (*.f64 re re) (*.f64 im im))
(fma.f64 im im (*.f64 re re))
(fma.f64 re re (*.f64 im im))
(exp.f64 (*.f64 #s(literal 2 binary64) (log.f64 re)))
(pow.f64 re #s(literal 2 binary64))
(pow.f64 (exp.f64 #s(literal 2 binary64)) (log.f64 re))
(*.f64 re re)

simplify394.0ms (17.3%)

Algorithm
egg-herbie
Rules
6730×*-lowering-*.f32
6730×*-lowering-*.f64
3558×cube-prod
2910×/-lowering-/.f32
2910×/-lowering-/.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
013216
134150
294150
3373150
41028150
52083150
62400150
72734150
83448150
94065150
104984150
116015150
126590150
136728150
146728150
156728150
167424150
08241150
Stop Event
iter limit
node limit
Counts
48 → 48
Calls
Call 1
Inputs
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow im 2)
(pow re 2)
(+ (pow im 2) (pow re 2))
(+ (pow im 2) (pow re 2))
(+ (pow im 2) (pow re 2))
(pow im 2)
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(pow im 2)
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(pow im 2)
(+ (pow im 2) (pow re 2))
(+ (pow im 2) (pow re 2))
(+ (pow im 2) (pow re 2))
(pow re 2)
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(pow re 2)
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
(pow re 2)
Outputs
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow im 2)
(*.f64 im im)
(pow re 2)
(*.f64 re re)
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow im 2)
(*.f64 im im)
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow im 2)
(*.f64 im im)
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow im 2) (+ 1 (/ (pow re 2) (pow im 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow im 2)
(*.f64 im im)
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(+ (pow im 2) (pow re 2))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow re 2)
(*.f64 re re)
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow re 2)
(*.f64 re re)
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(* (pow re 2) (+ 1 (/ (pow im 2) (pow re 2))))
(+.f64 (*.f64 im im) (*.f64 re re))
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)
(pow re 2)
(*.f64 re re)

eval39.0ms (1.7%)

Compiler

Compiled 324 to 23 computations (92.9% saved)

prune3.0ms (0.1%)

Pruning

3 alts after pruning (0 fresh and 3 done)

PrunedKeptTotal
New60060
Fresh000
Picked022
Done011
Total60363
Accuracy
100.0%
Counts
63 → 3
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(fma.f64 im im (*.f64 re re))
100.0%
(+.f64 (*.f64 re re) (*.f64 im im))
99.3%
(*.f64 im im)
Compiler

Compiled 40 to 18 computations (55% saved)

regimes9.0ms (0.4%)

Counts
3 → 1
Calls
Call 1
Inputs
(*.f64 im im)
(+.f64 (*.f64 re re) (*.f64 im im))
(fma.f64 im im (*.f64 re re))
Outputs
(fma.f64 im im (*.f64 re re))
Calls

5 calls:

2.0ms
im
2.0ms
re
2.0ms
(+.f64 (*.f64 re re) (*.f64 im im))
2.0ms
(*.f64 im im)
2.0ms
(*.f64 re re)
Results
AccuracySegmentsBranch
100.0%1re
100.0%1im
100.0%1(+.f64 (*.f64 re re) (*.f64 im im))
100.0%1(*.f64 re re)
100.0%1(*.f64 im im)
Compiler

Compiled 25 to 15 computations (40% saved)

regimes7.0ms (0.3%)

Counts
2 → 1
Calls
Call 1
Inputs
(*.f64 im im)
(+.f64 (*.f64 re re) (*.f64 im im))
Outputs
(+.f64 (*.f64 re re) (*.f64 im im))
Calls

5 calls:

1.0ms
im
1.0ms
re
1.0ms
(+.f64 (*.f64 re re) (*.f64 im im))
1.0ms
(*.f64 im im)
1.0ms
(*.f64 re re)
Results
AccuracySegmentsBranch
100.0%1re
100.0%1im
100.0%1(+.f64 (*.f64 re re) (*.f64 im im))
100.0%1(*.f64 re re)
100.0%1(*.f64 im im)
Compiler

Compiled 25 to 15 computations (40% saved)

regimes15.0ms (0.6%)

Accuracy

Total 0.0b remaining (0%)

Threshold costs 0b (0%)

Counts
1 → 1
Calls
Call 1
Inputs
(*.f64 im im)
Outputs
(*.f64 im im)
Calls

3 calls:

12.0ms
(*.f64 im im)
1.0ms
im
1.0ms
re
Results
AccuracySegmentsBranch
99.3%1re
99.3%1im
99.3%1(*.f64 im im)
Compiler

Compiled 11 to 7 computations (36.4% saved)

simplify7.0ms (0.3%)

Algorithm
egg-herbie
Rules
+-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0616
1716
Stop Event
saturated
Calls
Call 1
Inputs
(fma.f64 im im (*.f64 re re))
(+.f64 (*.f64 re re) (*.f64 im im))
(*.f64 im im)
Outputs
(fma.f64 im im (*.f64 re re))
(+.f64 (*.f64 re re) (*.f64 im im))
(*.f64 im im)

soundness489.0ms (21.5%)

Rules
6730×*-lowering-*.f32
6730×*-lowering-*.f64
3558×cube-prod
2910×/-lowering-/.f32
2910×/-lowering-/.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
013216
134150
294150
3373150
41028150
52078150
62395150
72729150
83443150
94060150
104979150
116010150
126585150
136723150
146723150
156723150
167419150
08236150
059
1129
2199
3279
4449
5519
6569
0569
Stop Event
done
iter limit
saturated
iter limit
node limit
Compiler

Compiled 31 to 13 computations (58.1% saved)

preprocess31.0ms (1.3%)

Remove

(sort re im)

(abs im)

(abs re)

Compiler

Compiled 150 to 70 computations (53.3% saved)

end0.0ms (0%)

Profiling

Loading profile data...