Details

Time bar (total: 7.7s)

analyze91.0ms (1.2%)

Algorithm
search
Search
TrueOtherFalseIter
0%99.9%0.1%0
0%99.9%0.1%1
50%50%0.1%2
50%50%0.1%3
74.9%25%0.1%4
74.9%25%0.1%5
74.9%21.9%3.2%6
74.9%20.3%4.8%7
74.9%18%7.1%8
74.9%16.8%8.3%9
74.9%15.4%9.7%10
74.9%14.7%10.3%11
74.9%14%11.1%12
Compiler

Compiled 8 to 6 computations (25% saved)

sample2.9s (37.7%)

Results
1.3s6185×body256valid
760.0ms1366×body1024valid
405.0ms670×body1024invalid
216.0ms702×body512valid
158.0ms361×body512invalid
77.0ms468×body256invalid
2.0msbody2048valid

preprocess31.0ms (0.4%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0916
11116
022
Stop Event
saturated
saturated
Calls
Call 1
Inputs
0
1
Outputs
0
1
Call 2
Inputs
(*.f64 (exp.f64 re) (sin.f64 im))
(*.f64 (exp.f64 im) (sin.f64 re))
Outputs
(*.f64 (exp.f64 re) (sin.f64 im))
(*.f64 (exp.f64 im) (sin.f64 re))
Compiler

Compiled 9 to 7 computations (22.2% saved)

simplify13.0ms (0.2%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
068
178
Stop Event
saturated
Counts
1 → 1
Calls
Call 1
Inputs
(*.f64 (exp.f64 re) (sin.f64 im))
Outputs
(*.f64 (exp.f64 re) (sin.f64 im))

eval1.0ms (0%)

Compiler

Compiled 7 to 5 computations (28.6% saved)

prune1.0ms (0%)

Pruning

2 alts after pruning (2 fresh and 0 done)

PrunedKeptTotal
New011
Fresh011
Picked000
Done000
Total022
Error
0.0b
Counts
2 → 1
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(*.f64 (exp.f64 re) (sin.f64 im))
Compiler

Compiled 7 to 5 computations (28.6% saved)

localize14.0ms (0.2%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (exp.f64 re) (sin.f64 im))
Compiler

Compiled 13 to 5 computations (61.5% saved)

series8.0ms (0.1%)

Counts
1 → 24
Calls

6 calls:

TimeVariablePointExpression
2.0ms
re
@0
(*.f64 (exp.f64 re) (sin.f64 im))
2.0ms
re
@inf
(*.f64 (exp.f64 re) (sin.f64 im))
2.0ms
im
@0
(*.f64 (exp.f64 re) (sin.f64 im))
1.0ms
im
@inf
(*.f64 (exp.f64 re) (sin.f64 im))
1.0ms
re
@-inf
(*.f64 (exp.f64 re) (sin.f64 im))

rewrite61.0ms (0.8%)

Algorithm
batch-egg-rewrite
Rules
530×pow1_binary64
504×add-sqr-sqrt_binary64
483×add-log-exp_binary64
483×log1p-expm1-u_binary64
483×expm1-log1p-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
068
11138
213248
Stop Event
node limit
Counts
1 → 11
Calls
Call 1
Inputs
(*.f64 (exp.f64 re) (sin.f64 im))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (exp.f64 re) (sin.f64 im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (exp.f64 re) (sin.f64 im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (exp.f64 re) (sin.f64 im)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (exp.f64 re) (sin.f64 im))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (exp.f64 re) (sin.f64 im))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (exp.f64 re) (sin.f64 im)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (exp.f64 re)) (sin.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (exp.f64 re) (sin.f64 im)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (exp.f64 re) (sin.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (exp.f64 re) (sin.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 re (log.f64 (sin.f64 im))))))))

simplify114.0ms (1.5%)

Algorithm
egg-herbie
Rules
828×distribute-lft-out_binary64
812×fma-def_binary64
569×unswap-sqr_binary64
547×distribute-rgt-in_binary64
403×associate-*l*_binary64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
044296
1122294
2312274
3917250
42885249
53749249
65943249
77045249
87825249
Stop Event
node limit
Counts
35 → 27
Calls
Call 1
Inputs
(sin.f64 im)
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (+.f64 (*.f64 1/6 (*.f64 (sin.f64 im) (pow.f64 re 3))) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2))))))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (exp.f64 re) im)
(+.f64 (*.f64 -1/6 (*.f64 (exp.f64 re) (pow.f64 im 3))) (*.f64 (exp.f64 re) im))
(+.f64 (*.f64 -1/6 (*.f64 (exp.f64 re) (pow.f64 im 3))) (+.f64 (*.f64 1/120 (*.f64 (exp.f64 re) (pow.f64 im 5))) (*.f64 (exp.f64 re) im)))
(+.f64 (*.f64 -1/6 (*.f64 (exp.f64 re) (pow.f64 im 3))) (+.f64 (*.f64 1/120 (*.f64 (exp.f64 re) (pow.f64 im 5))) (+.f64 (*.f64 -1/5040 (*.f64 (exp.f64 re) (pow.f64 im 7))) (*.f64 (exp.f64 re) im))))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
Outputs
(sin.f64 im)
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 re 1) (sin.f64 im))
(fma.f64 (sin.f64 im) re (sin.f64 im))
(*.f64 (sin.f64 im) (+.f64 re 1))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (fma.f64 (sin.f64 im) re (*.f64 1/2 (*.f64 (sin.f64 im) (*.f64 re re)))))
(+.f64 (*.f64 (+.f64 re 1) (sin.f64 im)) (*.f64 (*.f64 re re) (*.f64 (sin.f64 im) 1/2)))
(*.f64 (sin.f64 im) (+.f64 (+.f64 re 1) (*.f64 re (*.f64 re 1/2))))
(*.f64 (sin.f64 im) (+.f64 re (fma.f64 re (*.f64 re 1/2) 1)))
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (+.f64 (*.f64 1/6 (*.f64 (sin.f64 im) (pow.f64 re 3))) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2))))))
(+.f64 (sin.f64 im) (fma.f64 (sin.f64 im) re (fma.f64 1/6 (*.f64 (sin.f64 im) (pow.f64 re 3)) (*.f64 1/2 (*.f64 (sin.f64 im) (*.f64 re re))))))
(+.f64 (*.f64 (+.f64 re 1) (sin.f64 im)) (fma.f64 1/2 (*.f64 (sin.f64 im) (*.f64 re re)) (*.f64 (sin.f64 im) (*.f64 (pow.f64 re 3) 1/6))))
(fma.f64 (+.f64 re 1) (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 re (*.f64 re 1/2)) (*.f64 1/6 (pow.f64 re 3)))))
(*.f64 (sin.f64 im) (+.f64 (+.f64 re 1) (*.f64 (*.f64 re re) (+.f64 1/2 (*.f64 re 1/6)))))
(*.f64 (sin.f64 im) (+.f64 (fma.f64 re (*.f64 re 1/2) 1) (fma.f64 1/6 (pow.f64 re 3) re)))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (exp.f64 re) im)
(*.f64 im (exp.f64 re))
(+.f64 (*.f64 -1/6 (*.f64 (exp.f64 re) (pow.f64 im 3))) (*.f64 (exp.f64 re) im))
(fma.f64 -1/6 (*.f64 (exp.f64 re) (pow.f64 im 3)) (*.f64 im (exp.f64 re)))
(fma.f64 im (exp.f64 re) (*.f64 (pow.f64 im 3) (*.f64 (exp.f64 re) -1/6)))
(*.f64 (exp.f64 re) (+.f64 im (*.f64 -1/6 (pow.f64 im 3))))
(*.f64 (exp.f64 re) (fma.f64 -1/6 (pow.f64 im 3) im))
(+.f64 (*.f64 -1/6 (*.f64 (exp.f64 re) (pow.f64 im 3))) (+.f64 (*.f64 1/120 (*.f64 (exp.f64 re) (pow.f64 im 5))) (*.f64 (exp.f64 re) im)))
(fma.f64 -1/6 (*.f64 (exp.f64 re) (pow.f64 im 3)) (fma.f64 1/120 (*.f64 (exp.f64 re) (pow.f64 im 5)) (*.f64 im (exp.f64 re))))
(fma.f64 (exp.f64 re) (*.f64 1/120 (pow.f64 im 5)) (*.f64 (exp.f64 re) (+.f64 im (*.f64 -1/6 (pow.f64 im 3)))))
(*.f64 (exp.f64 re) (+.f64 (fma.f64 1/120 (pow.f64 im 5) im) (*.f64 -1/6 (pow.f64 im 3))))
(*.f64 (exp.f64 re) (+.f64 (*.f64 -1/6 (pow.f64 im 3)) (fma.f64 1/120 (pow.f64 im 5) im)))
(*.f64 (exp.f64 re) (+.f64 im (fma.f64 -1/6 (pow.f64 im 3) (*.f64 1/120 (pow.f64 im 5)))))
(+.f64 (*.f64 -1/6 (*.f64 (exp.f64 re) (pow.f64 im 3))) (+.f64 (*.f64 1/120 (*.f64 (exp.f64 re) (pow.f64 im 5))) (+.f64 (*.f64 -1/5040 (*.f64 (exp.f64 re) (pow.f64 im 7))) (*.f64 (exp.f64 re) im))))
(fma.f64 -1/6 (*.f64 (exp.f64 re) (pow.f64 im 3)) (fma.f64 1/120 (*.f64 (exp.f64 re) (pow.f64 im 5)) (fma.f64 -1/5040 (*.f64 (exp.f64 re) (pow.f64 im 7)) (*.f64 im (exp.f64 re)))))
(+.f64 (*.f64 (exp.f64 re) (+.f64 im (*.f64 -1/6 (pow.f64 im 3)))) (*.f64 (exp.f64 re) (+.f64 (*.f64 1/120 (pow.f64 im 5)) (*.f64 -1/5040 (pow.f64 im 7)))))
(*.f64 (exp.f64 re) (+.f64 (fma.f64 -1/6 (pow.f64 im 3) im) (fma.f64 -1/5040 (pow.f64 im 7) (*.f64 1/120 (pow.f64 im 5)))))
(*.f64 (exp.f64 re) (+.f64 (fma.f64 -1/6 (pow.f64 im 3) (*.f64 1/120 (pow.f64 im 5))) (fma.f64 -1/5040 (pow.f64 im 7) im)))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))
(*.f64 (sin.f64 im) (exp.f64 re))

eval14.0ms (0.2%)

Compiler

Compiled 292 to 144 computations (50.7% saved)

prune14.0ms (0.2%)

Pruning

6 alts after pruning (5 fresh and 1 done)

PrunedKeptTotal
New22527
Fresh000
Picked011
Done000
Total22628
Error
0b
Counts
28 → 6
Alt Table
Click to see full alt table
StatusErrorProgram
21.0b
(*.f64 (exp.f64 re) im)
0.0b
(*.f64 (exp.f64 re) (sin.f64 im))
20.5b
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))
20.4b
(*.f64 (sin.f64 im) (+.f64 re 1))
20.4b
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
20.7b
(sin.f64 im)
Compiler

Compiled 87 to 55 computations (36.8% saved)

localize18.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
0.1b
(*.f64 (sin.f64 im) re)
Compiler

Compiled 17 to 5 computations (70.6% saved)

series11.0ms (0.1%)

Counts
2 → 11
Calls

12 calls:

TimeVariablePointExpression
2.0ms
im
@inf
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
2.0ms
re
@0
(*.f64 (sin.f64 im) re)
1.0ms
im
@0
(*.f64 (sin.f64 im) re)
1.0ms
re
@inf
(*.f64 (sin.f64 im) re)
1.0ms
im
@0
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))

rewrite84.0ms (1.1%)

Algorithm
batch-egg-rewrite
Rules
718×pow1_binary64
666×add-log-exp_binary64
666×log1p-expm1-u_binary64
666×expm1-log1p-u_binary64
651×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0617
112815
2179115
Stop Event
node limit
Counts
2 → 49
Calls
Call 1
Inputs
(*.f64 (sin.f64 im) re)
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (sin.f64 im) re)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sin.f64 im) re) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (sin.f64 im) re)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (sin.f64 im) re)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (sin.f64 im) re) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (sin.f64 im) re) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (sin.f64 im)) re))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (sin.f64 im) re) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (sin.f64 im) re)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (sin.f64 im) re)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (sin.f64 im) re)))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (sin.f64 im) (+.f64 re 1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (sin.f64 im) 2) (*.f64 (sin.f64 im) (-.f64 1 re))) (/.f64 (pow.f64 (*.f64 (sin.f64 im) re) 2) (*.f64 (sin.f64 im) (-.f64 1 re))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sin.f64 im) (+.f64 1 re))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sin.f64 im) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sin.f64 im) (+.f64 re 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 (sin.f64 im) (+.f64 re 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))) (pow.f64 (cbrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))) 2) (cbrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))) (sqrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 (sin.f64 im) 3) (pow.f64 (*.f64 (sin.f64 im) re) 3)) (/.f64 1 (+.f64 (pow.f64 (sin.f64 im) 2) (*.f64 (*.f64 (sin.f64 im) re) (-.f64 (*.f64 (sin.f64 im) re) (sin.f64 im))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (sin.f64 im) 2) (pow.f64 (*.f64 (sin.f64 im) re) 2)) (/.f64 1 (*.f64 (sin.f64 im) (-.f64 1 re))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 re 1) (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (sin.f64 im) 2) (*.f64 (*.f64 (sin.f64 im) re) (-.f64 (*.f64 (sin.f64 im) re) (sin.f64 im)))) (+.f64 (pow.f64 (sin.f64 im) 3) (pow.f64 (*.f64 (sin.f64 im) re) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (*.f64 (sin.f64 im) (-.f64 1 re)) (-.f64 (pow.f64 (sin.f64 im) 2) (pow.f64 (*.f64 (sin.f64 im) re) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (sin.f64 im) 3) (pow.f64 (*.f64 (sin.f64 im) re) 3)) (+.f64 (pow.f64 (sin.f64 im) 2) (*.f64 (*.f64 (sin.f64 im) re) (-.f64 (*.f64 (sin.f64 im) re) (sin.f64 im)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (sin.f64 im) 3) (pow.f64 (*.f64 (sin.f64 im) re) 3)) (+.f64 (pow.f64 (*.f64 (sin.f64 im) re) 2) (-.f64 (pow.f64 (sin.f64 im) 2) (*.f64 (pow.f64 (sin.f64 im) 2) re))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (sin.f64 im) 2) (pow.f64 (*.f64 (sin.f64 im) re) 2)) (*.f64 (sin.f64 im) (-.f64 1 re)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 (sin.f64 im) 3) (pow.f64 (*.f64 (sin.f64 im) re) 3))) (neg.f64 (+.f64 (pow.f64 (sin.f64 im) 2) (*.f64 (*.f64 (sin.f64 im) re) (-.f64 (*.f64 (sin.f64 im) re) (sin.f64 im))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (sin.f64 im) 2) (pow.f64 (*.f64 (sin.f64 im) re) 2))) (neg.f64 (*.f64 (sin.f64 im) (-.f64 1 re))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 (sin.f64 im) re) 2) (pow.f64 (sin.f64 im) 2)) (-.f64 (*.f64 (sin.f64 im) re) (sin.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sin.f64 im) (+.f64 re 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (sin.f64 im) (+.f64 re 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (sin.f64 im) (+.f64 re 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 (sin.f64 im) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (sin.f64 im) (+.f64 re 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (sin.f64 im) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (sin.f64 im) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (sin.f64 im) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sin.f64 im) re (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 re (sin.f64 im) (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (sin.f64 im) (*.f64 (sin.f64 im) re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 (sin.f64 im) re) (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (sin.f64 im)) 2) (cbrt.f64 (sin.f64 im)) (*.f64 (sin.f64 im) re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 (sin.f64 im) re)) 2) (cbrt.f64 (*.f64 (sin.f64 im) re)) (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (sin.f64 im)) (sqrt.f64 (sin.f64 im)) (*.f64 (sin.f64 im) re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 (sin.f64 im) re)) (sqrt.f64 (*.f64 (sin.f64 im) re)) (sin.f64 im))))))

simplify163.0ms (2.1%)

Algorithm
egg-herbie
Rules
686×*-commutative_binary64
636×+-commutative_binary64
482×distribute-lft-out_binary64
458×associate-+l+_binary64
453×distribute-rgt-in_binary64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
045185
1119185
2302174
31131171
43202165
54344165
65073165
75869165
86030165
96218165
106789165
117243165
Stop Event
node limit
Counts
60 → 67
Calls
Call 1
Inputs
(*.f64 re im)
(+.f64 (*.f64 -1/6 (*.f64 re (pow.f64 im 3))) (*.f64 re im))
(+.f64 (*.f64 -1/6 (*.f64 re (pow.f64 im 3))) (+.f64 (*.f64 1/120 (*.f64 re (pow.f64 im 5))) (*.f64 re im)))
(+.f64 (*.f64 -1/5040 (*.f64 re (pow.f64 im 7))) (+.f64 (*.f64 -1/6 (*.f64 re (pow.f64 im 3))) (+.f64 (*.f64 1/120 (*.f64 re (pow.f64 im 5))) (*.f64 re im))))
(*.f64 (+.f64 1 re) im)
(+.f64 (*.f64 (-.f64 (*.f64 -1/6 re) 1/6) (pow.f64 im 3)) (*.f64 (+.f64 1 re) im))
(+.f64 (*.f64 (-.f64 (*.f64 -1/6 re) 1/6) (pow.f64 im 3)) (+.f64 (*.f64 (+.f64 (*.f64 1/120 re) 1/120) (pow.f64 im 5)) (*.f64 (+.f64 1 re) im)))
(+.f64 (*.f64 (-.f64 (*.f64 -1/6 re) 1/6) (pow.f64 im 3)) (+.f64 (*.f64 (+.f64 (*.f64 1/120 re) 1/120) (pow.f64 im 5)) (+.f64 (*.f64 (-.f64 (*.f64 -1/5040 re) 1/5040) (pow.f64 im 7)) (*.f64 (+.f64 1 re) im))))
(sin.f64 im)
(*.f64 (sin.f64 im) re)
(*.f64 (sin.f64 im) re)
Outputs
(*.f64 re im)
(+.f64 (*.f64 -1/6 (*.f64 re (pow.f64 im 3))) (*.f64 re im))
(fma.f64 -1/6 (*.f64 re (pow.f64 im 3)) (*.f64 re im))
(fma.f64 re im (*.f64 re (*.f64 -1/6 (pow.f64 im 3))))
(*.f64 re (+.f64 (*.f64 -1/6 (pow.f64 im 3)) im))
(*.f64 re (+.f64 im (*.f64 -1/6 (pow.f64 im 3))))
(+.f64 (*.f64 -1/6 (*.f64 re (pow.f64 im 3))) (+.f64 (*.f64 1/120 (*.f64 re (pow.f64 im 5))) (*.f64 re im)))
(fma.f64 -1/6 (*.f64 re (pow.f64 im 3)) (fma.f64 1/120 (*.f64 re (pow.f64 im 5)) (*.f64 re im)))
(fma.f64 -1/6 (*.f64 re (pow.f64 im 3)) (fma.f64 re im (*.f64 (pow.f64 im 5) (*.f64 re 1/120))))
(fma.f64 (pow.f64 im 5) (*.f64 re 1/120) (*.f64 re (+.f64 (*.f64 -1/6 (pow.f64 im 3)) im)))
(*.f64 re (+.f64 im (+.f64 (*.f64 -1/6 (pow.f64 im 3)) (*.f64 1/120 (pow.f64 im 5)))))
(*.f64 re (+.f64 (*.f64 1/120 (pow.f64 im 5)) (+.f64 im (*.f64 -1/6 (pow.f64 im 3)))))
(+.f64 (*.f64 -1/5040 (*.f64 re (pow.f64 im 7))) (+.f64 (*.f64 -1/6 (*.f64 re (pow.f64 im 3))) (+.f64 (*.f64 1/120 (*.f64 re (pow.f64 im 5))) (*.f64 re im))))
(fma.f64 -1/5040 (*.f64 re (pow.f64 im 7)) (fma.f64 -1/6 (*.f64 re (pow.f64 im 3)) (fma.f64 1/120 (*.f64 re (pow.f64 im 5)) (*.f64 re im))))
(fma.f64 -1/5040 (*.f64 re (pow.f64 im 7)) (fma.f64 -1/6 (*.f64 re (pow.f64 im 3)) (fma.f64 re im (*.f64 (pow.f64 im 5) (*.f64 re 1/120)))))
(fma.f64 re (*.f64 -1/5040 (pow.f64 im 7)) (fma.f64 (pow.f64 im 5) (*.f64 re 1/120) (*.f64 re (+.f64 (*.f64 -1/6 (pow.f64 im 3)) im))))
(*.f64 re (+.f64 (+.f64 im (*.f64 1/120 (pow.f64 im 5))) (+.f64 (*.f64 -1/6 (pow.f64 im 3)) (*.f64 -1/5040 (pow.f64 im 7)))))
(*.f64 re (+.f64 (+.f64 im (*.f64 -1/6 (pow.f64 im 3))) (+.f64 (*.f64 1/120 (pow.f64 im 5)) (*.f64 -1/5040 (pow.f64 im 7)))))
(*.f64 re (+.f64 (*.f64 1/120 (pow.f64 im 5)) (+.f64 (*.f64 -1/5040 (pow.f64 im 7)) (+.f64 im (*.f64 -1/6 (pow.f64 im 3))))))
(*.f64 (+.f64 1 re) im)
(*.f64 im (+.f64 re 1))
(fma.f64 re im im)
(+.f64 (*.f64 (-.f64 (*.f64 -1/6 re) 1/6) (pow.f64 im 3)) (*.f64 (+.f64 1 re) im))
(fma.f64 (fma.f64 -1/6 re -1/6) (pow.f64 im 3) (*.f64 im (+.f64 re 1)))
(fma.f64 im (+.f64 re 1) (*.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6)))
(fma.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6) (fma.f64 re im im))
(*.f64 (+.f64 re 1) (+.f64 im (*.f64 -1/6 (pow.f64 im 3))))
(+.f64 (*.f64 (-.f64 (*.f64 -1/6 re) 1/6) (pow.f64 im 3)) (+.f64 (*.f64 (+.f64 (*.f64 1/120 re) 1/120) (pow.f64 im 5)) (*.f64 (+.f64 1 re) im)))
(fma.f64 (fma.f64 -1/6 re -1/6) (pow.f64 im 3) (fma.f64 (fma.f64 1/120 re 1/120) (pow.f64 im 5) (*.f64 im (+.f64 re 1))))
(fma.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6) (fma.f64 (pow.f64 im 5) (fma.f64 re 1/120 1/120) (*.f64 im (+.f64 re 1))))
(fma.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6) (fma.f64 (pow.f64 im 5) (fma.f64 re 1/120 1/120) (fma.f64 re im im)))
(fma.f64 (pow.f64 im 5) (fma.f64 re 1/120 1/120) (fma.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6) (fma.f64 re im im)))
(*.f64 (+.f64 re 1) (+.f64 (*.f64 1/120 (pow.f64 im 5)) (+.f64 im (*.f64 -1/6 (pow.f64 im 3)))))
(+.f64 (*.f64 (-.f64 (*.f64 -1/6 re) 1/6) (pow.f64 im 3)) (+.f64 (*.f64 (+.f64 (*.f64 1/120 re) 1/120) (pow.f64 im 5)) (+.f64 (*.f64 (-.f64 (*.f64 -1/5040 re) 1/5040) (pow.f64 im 7)) (*.f64 (+.f64 1 re) im))))
(fma.f64 (fma.f64 -1/6 re -1/6) (pow.f64 im 3) (fma.f64 (fma.f64 1/120 re 1/120) (pow.f64 im 5) (fma.f64 (fma.f64 -1/5040 re -1/5040) (pow.f64 im 7) (*.f64 im (+.f64 re 1)))))
(fma.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6) (fma.f64 (pow.f64 im 5) (fma.f64 re 1/120 1/120) (fma.f64 im (+.f64 re 1) (*.f64 (pow.f64 im 7) (fma.f64 re -1/5040 -1/5040)))))
(fma.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6) (fma.f64 (pow.f64 im 5) (fma.f64 re 1/120 1/120) (fma.f64 (pow.f64 im 7) (fma.f64 re -1/5040 -1/5040) (fma.f64 re im im))))
(fma.f64 (pow.f64 im 5) (fma.f64 re 1/120 1/120) (fma.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6) (fma.f64 (pow.f64 im 7) (fma.f64 re -1/5040 -1/5040) (fma.f64 re im im))))
(*.f64 (+.f64 re 1) (+.f64 (+.f64 im (*.f64 -1/6 (pow.f64 im 3))) (+.f64 (*.f64 1/120 (pow.f64 im 5)) (*.f64 -1/5040 (pow.f64 im 7)))))
(*.f64 (+.f64 re 1) (+.f64 (*.f64 1/120 (pow.f64 im 5)) (+.f64 (*.f64 -1/5040 (pow.f64 im 7)) (+.f64 im (*.f64 -1/6 (pow.f64 im 3))))))
(sin.f64 im)
(*.f64 (sin.f64 im) re)
(*.f64 re (sin.f64 im))
(*.f64 (sin.f64 im) re)
(*.f64 re (sin.f64 im))

localize8.0ms (0.1%)

Compiler

Compiled 5 to 3 computations (40% saved)

localize12.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (exp.f64 re) im)
Compiler

Compiled 10 to 4 computations (60% saved)

series5.0ms (0.1%)

Counts
1 → 4
Calls

6 calls:

TimeVariablePointExpression
1.0ms
re
@0
(*.f64 (exp.f64 re) im)
1.0ms
im
@inf
(*.f64 (exp.f64 re) im)
1.0ms
im
@-inf
(*.f64 (exp.f64 re) im)
1.0ms
re
@inf
(*.f64 (exp.f64 re) im)
1.0ms
im
@0
(*.f64 (exp.f64 re) im)

rewrite69.0ms (0.9%)

Algorithm
batch-egg-rewrite
Rules
435×pow1_binary64
414×add-sqr-sqrt_binary64
409×*-un-lft-identity_binary64
397×add-log-exp_binary64
397×log1p-expm1-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
056
1946
211006
Stop Event
node limit
Counts
1 → 14
Calls
Call 1
Inputs
(*.f64 (exp.f64 re) im)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (exp.f64 re) im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (*.f64 (cbrt.f64 (pow.f64 (exp.f64 (exp.f64 re)) im)) (cbrt.f64 (pow.f64 (exp.f64 (exp.f64 re)) im)))) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 (exp.f64 re)) im))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (exp.f64 re)) im))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (exp.f64 re)) im))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (exp.f64 re) im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (exp.f64 re) im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (exp.f64 re) im) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (exp.f64 re) im)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (exp.f64 re) im)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (exp.f64 re) im) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (exp.f64 re)) im))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (exp.f64 re) im) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (exp.f64 re) im)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (exp.f64 re) im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 re (log.f64 im)))))))

simplify162.0ms (2.1%)

Algorithm
egg-herbie
Rules
709×distribute-lft-out_binary64
619×*-commutative_binary64
531×associate-+l+_binary64
442×sqr-pow_binary64
431×fma-def_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
01846
15346
213642
340437
4149937
5239837
6402337
7415537
8440037
9475637
10550237
11634637
12710737
13763837
Stop Event
node limit
Counts
18 → 21
Calls
Call 1
Inputs
im
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(+.f64 (*.f64 1/6 (*.f64 (pow.f64 re 3) im)) (+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im)))
Outputs
im
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(fma.f64 im re im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(fma.f64 im re (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(*.f64 im (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
(+.f64 (*.f64 1/6 (*.f64 (pow.f64 re 3) im)) (+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im)))
(fma.f64 1/6 (*.f64 im (pow.f64 re 3)) (fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im)))
(fma.f64 1/6 (*.f64 im (pow.f64 re 3)) (fma.f64 im re (fma.f64 1/2 (*.f64 im (*.f64 re re)) im)))
(fma.f64 im (fma.f64 1/6 (pow.f64 re 3) re) (*.f64 im (fma.f64 1/2 (*.f64 re re) 1)))
(fma.f64 im (fma.f64 1/6 (pow.f64 re 3) (*.f64 re (fma.f64 re 1/2 1))) im)

localize16.0ms (0.2%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (sin.f64 im) (+.f64 re 1))
Compiler

Compiled 16 to 9 computations (43.8% saved)

series5.0ms (0.1%)

Counts
1 → 24
Calls

6 calls:

TimeVariablePointExpression
1.0ms
im
@0
(*.f64 (sin.f64 im) (+.f64 re 1))
1.0ms
im
@inf
(*.f64 (sin.f64 im) (+.f64 re 1))
1.0ms
re
@inf
(*.f64 (sin.f64 im) (+.f64 re 1))
1.0ms
re
@-inf
(*.f64 (sin.f64 im) (+.f64 re 1))
1.0ms
im
@-inf
(*.f64 (sin.f64 im) (+.f64 re 1))

rewrite73.0ms (0.9%)

Algorithm
batch-egg-rewrite
Rules
729×pow1_binary64
676×log1p-expm1-u_binary64
676×expm1-log1p-u_binary64
675×add-log-exp_binary64
660×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
079
11469
218949
Stop Event
node limit
Counts
1 → 24
Calls
Call 1
Inputs
(*.f64 (sin.f64 im) (+.f64 re 1))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (sin.f64 im) re) (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 (sin.f64 im) re) 1) (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (sin.f64 im) (+.f64 re 1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 (sin.f64 im) re) 3) (pow.f64 (sin.f64 im) 3)) (+.f64 (*.f64 (*.f64 (sin.f64 im) re) (*.f64 (sin.f64 im) re)) (-.f64 (pow.f64 (sin.f64 im) 2) (*.f64 (*.f64 (sin.f64 im) re) (sin.f64 im)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 (sin.f64 im) re) (*.f64 (sin.f64 im) re)) (pow.f64 (sin.f64 im) 2)) (-.f64 (*.f64 (sin.f64 im) re) (sin.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 (pow.f64 re 3)) (sin.f64 im)) (fma.f64 re re (-.f64 1 re)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 re re -1) (sin.f64 im)) (+.f64 re -1))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (sin.f64 im) (+.f64 1 (pow.f64 re 3))) (fma.f64 re re (-.f64 1 re)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (sin.f64 im) (fma.f64 re re -1)) (+.f64 re -1))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sin.f64 im) (+.f64 re 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (sin.f64 im) (+.f64 re 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (sin.f64 im) (+.f64 re 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (sin.f64 im) (+.f64 re 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (sin.f64 im)) (+.f64 re 1)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (sin.f64 im) (+.f64 re 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (sin.f64 im) 3) (pow.f64 (+.f64 re 1) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (+.f64 re 1) 3) (pow.f64 (sin.f64 im) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (sin.f64 im) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (sin.f64 im) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (log1p.f64 re) (log.f64 (sin.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sin.f64 im) re (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 re (sin.f64 im) (sin.f64 im))))))

simplify128.0ms (1.7%)

Algorithm
egg-herbie
Rules
1174×distribute-rgt-in_binary64
845×distribute-lft-in_binary64
736×fma-def_binary64
426×unswap-sqr_binary64
372×distribute-lft-out_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
030274
184274
2249254
3929240
43139240
54762240
65206240
75914240
86015240
96155240
106349240
Stop Event
node limit
Counts
48 → 37
Calls
Call 1
Inputs
(*.f64 (+.f64 1 re) im)
(+.f64 (*.f64 -1/6 (*.f64 (+.f64 1 re) (pow.f64 im 3))) (*.f64 (+.f64 1 re) im))
(+.f64 (*.f64 1/120 (*.f64 (+.f64 1 re) (pow.f64 im 5))) (+.f64 (*.f64 -1/6 (*.f64 (+.f64 1 re) (pow.f64 im 3))) (*.f64 (+.f64 1 re) im)))
(+.f64 (*.f64 1/120 (*.f64 (+.f64 1 re) (pow.f64 im 5))) (+.f64 (*.f64 -1/6 (*.f64 (+.f64 1 re) (pow.f64 im 3))) (+.f64 (*.f64 (+.f64 1 re) im) (*.f64 -1/5040 (*.f64 (+.f64 1 re) (pow.f64 im 7))))))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (sin.f64 im) (+.f64 1 re))
(sin.f64 im)
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (sin.f64 im) re)
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (sin.f64 im) re)
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
Outputs
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(+.f64 (*.f64 -1/6 (*.f64 (+.f64 1 re) (pow.f64 im 3))) (*.f64 (+.f64 1 re) im))
(fma.f64 -1/6 (*.f64 (+.f64 1 re) (pow.f64 im 3)) (*.f64 (+.f64 1 re) im))
(fma.f64 (+.f64 1 re) im (*.f64 (+.f64 1 re) (*.f64 (pow.f64 im 3) -1/6)))
(*.f64 (+.f64 1 re) (+.f64 im (*.f64 -1/6 (pow.f64 im 3))))
(*.f64 (+.f64 1 re) (fma.f64 -1/6 (pow.f64 im 3) im))
(+.f64 (*.f64 1/120 (*.f64 (+.f64 1 re) (pow.f64 im 5))) (+.f64 (*.f64 -1/6 (*.f64 (+.f64 1 re) (pow.f64 im 3))) (*.f64 (+.f64 1 re) im)))
(fma.f64 1/120 (*.f64 (+.f64 1 re) (pow.f64 im 5)) (fma.f64 -1/6 (*.f64 (+.f64 1 re) (pow.f64 im 3)) (*.f64 (+.f64 1 re) im)))
(fma.f64 1/120 (*.f64 (+.f64 1 re) (pow.f64 im 5)) (fma.f64 (+.f64 1 re) im (*.f64 (+.f64 1 re) (*.f64 (pow.f64 im 3) -1/6))))
(fma.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6) (*.f64 (+.f64 1 re) (+.f64 (*.f64 1/120 (pow.f64 im 5)) im)))
(*.f64 (+.f64 1 re) (+.f64 (*.f64 1/120 (pow.f64 im 5)) (fma.f64 -1/6 (pow.f64 im 3) im)))
(*.f64 (+.f64 1 re) (+.f64 im (fma.f64 -1/6 (pow.f64 im 3) (*.f64 1/120 (pow.f64 im 5)))))
(+.f64 (*.f64 1/120 (*.f64 (+.f64 1 re) (pow.f64 im 5))) (+.f64 (*.f64 -1/6 (*.f64 (+.f64 1 re) (pow.f64 im 3))) (+.f64 (*.f64 (+.f64 1 re) im) (*.f64 -1/5040 (*.f64 (+.f64 1 re) (pow.f64 im 7))))))
(fma.f64 1/120 (*.f64 (+.f64 1 re) (pow.f64 im 5)) (fma.f64 -1/6 (*.f64 (+.f64 1 re) (pow.f64 im 3)) (fma.f64 (+.f64 1 re) im (*.f64 -1/5040 (*.f64 (+.f64 1 re) (pow.f64 im 7))))))
(fma.f64 (pow.f64 im 5) (fma.f64 re 1/120 1/120) (fma.f64 (pow.f64 im 3) (fma.f64 re -1/6 -1/6) (fma.f64 (pow.f64 im 7) (fma.f64 re -1/5040 -1/5040) (fma.f64 re im im))))
(*.f64 (+.f64 1 re) (+.f64 (fma.f64 -1/6 (pow.f64 im 3) im) (fma.f64 -1/5040 (pow.f64 im 7) (*.f64 1/120 (pow.f64 im 5)))))
(*.f64 (+.f64 1 re) (+.f64 (fma.f64 -1/6 (pow.f64 im 3) (*.f64 -1/5040 (pow.f64 im 7))) (fma.f64 1/120 (pow.f64 im 5) im)))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(*.f64 (sin.f64 im) (+.f64 1 re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(sin.f64 im)
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(*.f64 (sin.f64 im) re)
(*.f64 re (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(*.f64 (sin.f64 im) re)
(*.f64 re (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 1 re) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(*.f64 (+.f64 1 re) (sin.f64 im))

localize30.0ms (0.4%)

Local error

Found 1 expressions with local error:

NewErrorProgram
1.4b
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))
Compiler

Compiled 27 to 13 computations (51.9% saved)

series9.0ms (0.1%)

Counts
1 → 24
Calls

6 calls:

TimeVariablePointExpression
4.0ms
im
@0
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))
2.0ms
im
@inf
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))
1.0ms
re
@-inf
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))
1.0ms
re
@inf
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))
1.0ms
im
@-inf
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))

rewrite79.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
769×pow1_binary64
706×add-log-exp_binary64
706×log1p-expm1-u_binary64
706×expm1-log1p-u_binary64
690×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0816
116016
2186716
Stop Event
node limit
Counts
1 → 21
Calls
Call 1
Inputs
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (sin.f64 im) (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re)) (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re)) 1) (sin.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))) (pow.f64 (cbrt.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))) 2) (cbrt.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))) (sqrt.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re)) 3) (pow.f64 (sin.f64 im) 3)) (+.f64 (*.f64 (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re)) (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re))) (-.f64 (pow.f64 (sin.f64 im) 2) (*.f64 (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re)) (sin.f64 im)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re)) (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re))) (pow.f64 (sin.f64 im) 2)) (-.f64 (*.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re)) (sin.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))))))))

simplify98.0ms (1.3%)

Algorithm
egg-herbie
Rules
810×associate-+l+_binary64
652×associate-+r+_binary64
559×associate-*l*_binary64
468×associate-*r*_binary64
376×distribute-lft-out_binary64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
046494
1139450
2374450
31418418
46152396
57787396
Stop Event
node limit
Counts
45 → 39
Calls
Call 1
Inputs
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(+.f64 (*.f64 (-.f64 (*.f64 -1/6 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1/6) (pow.f64 im 3)) (*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im))
(+.f64 (*.f64 (+.f64 1/120 (*.f64 1/120 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re))) (pow.f64 im 5)) (+.f64 (*.f64 (-.f64 (*.f64 -1/6 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1/6) (pow.f64 im 3)) (*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)))
(+.f64 (*.f64 (+.f64 1/120 (*.f64 1/120 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re))) (pow.f64 im 5)) (+.f64 (*.f64 (-.f64 (*.f64 -1/6 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1/6) (pow.f64 im 3)) (+.f64 (*.f64 (-.f64 (*.f64 -1/5040 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1/5040) (pow.f64 im 7)) (*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im))))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(sin.f64 im)
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))
(+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2))))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))
(+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2))))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
Outputs
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) im)
(+.f64 (*.f64 (-.f64 (*.f64 -1/6 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1/6) (pow.f64 im 3)) (*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im))
(fma.f64 (fma.f64 -1/6 (fma.f64 1/2 (*.f64 re re) re) -1/6) (pow.f64 im 3) (*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im))
(fma.f64 (fma.f64 -1/6 (fma.f64 1/2 (*.f64 re re) re) -1/6) (pow.f64 im 3) (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))
(fma.f64 (fma.f64 (*.f64 re re) -1/12 (fma.f64 re -1/6 -1/6)) (pow.f64 im 3) (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (+.f64 (*.f64 -1/6 (pow.f64 im 3)) im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (+.f64 im (*.f64 -1/6 (pow.f64 im 3))))
(+.f64 (*.f64 (+.f64 1/120 (*.f64 1/120 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re))) (pow.f64 im 5)) (+.f64 (*.f64 (-.f64 (*.f64 -1/6 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1/6) (pow.f64 im 3)) (*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)))
(fma.f64 (+.f64 1/120 (*.f64 (fma.f64 1/2 (*.f64 re re) re) 1/120)) (pow.f64 im 5) (fma.f64 (fma.f64 -1/6 (fma.f64 1/2 (*.f64 re re) re) -1/6) (pow.f64 im 3) (*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)))
(fma.f64 (fma.f64 (fma.f64 1/2 (*.f64 re re) re) 1/120 1/120) (pow.f64 im 5) (fma.f64 (fma.f64 -1/6 (fma.f64 1/2 (*.f64 re re) re) -1/6) (pow.f64 im 3) (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)))
(fma.f64 (fma.f64 (*.f64 re re) -1/12 (fma.f64 re -1/6 -1/6)) (pow.f64 im 3) (fma.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im (*.f64 (fma.f64 (fma.f64 1/2 (*.f64 re re) re) 1/120 1/120) (pow.f64 im 5))))
(fma.f64 (fma.f64 (*.f64 re re) 1/240 (fma.f64 re 1/120 1/120)) (pow.f64 im 5) (*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (+.f64 (*.f64 -1/6 (pow.f64 im 3)) im)))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (+.f64 (+.f64 im (*.f64 -1/6 (pow.f64 im 3))) (*.f64 1/120 (pow.f64 im 5))))
(+.f64 (*.f64 (+.f64 1/120 (*.f64 1/120 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re))) (pow.f64 im 5)) (+.f64 (*.f64 (-.f64 (*.f64 -1/6 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1/6) (pow.f64 im 3)) (+.f64 (*.f64 (-.f64 (*.f64 -1/5040 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1/5040) (pow.f64 im 7)) (*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im))))
(fma.f64 (+.f64 1/120 (*.f64 (fma.f64 1/2 (*.f64 re re) re) 1/120)) (pow.f64 im 5) (fma.f64 (fma.f64 -1/6 (fma.f64 1/2 (*.f64 re re) re) -1/6) (pow.f64 im 3) (fma.f64 (fma.f64 -1/5040 (fma.f64 1/2 (*.f64 re re) re) -1/5040) (pow.f64 im 7) (*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im))))
(fma.f64 (fma.f64 (fma.f64 1/2 (*.f64 re re) re) 1/120 1/120) (pow.f64 im 5) (fma.f64 (fma.f64 -1/6 (fma.f64 1/2 (*.f64 re re) re) -1/6) (pow.f64 im 3) (fma.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im (*.f64 (fma.f64 (fma.f64 1/2 (*.f64 re re) re) -1/5040 -1/5040) (pow.f64 im 7)))))
(fma.f64 (fma.f64 (*.f64 re re) -1/12 (fma.f64 re -1/6 -1/6)) (pow.f64 im 3) (fma.f64 (fma.f64 (fma.f64 1/2 (*.f64 re re) re) 1/120 1/120) (pow.f64 im 5) (fma.f64 (fma.f64 (*.f64 re re) -1/10080 (fma.f64 re -1/5040 -1/5040)) (pow.f64 im 7) (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))))
(+.f64 (*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (+.f64 (*.f64 -1/6 (pow.f64 im 3)) im)) (*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (+.f64 (*.f64 1/120 (pow.f64 im 5)) (*.f64 -1/5040 (pow.f64 im 7)))))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (+.f64 (+.f64 im (*.f64 1/120 (pow.f64 im 5))) (+.f64 (*.f64 -1/5040 (pow.f64 im 7)) (*.f64 -1/6 (pow.f64 im 3)))))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(sin.f64 im)
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(+.f64 (sin.f64 im) (*.f64 re (sin.f64 im)))
(fma.f64 re (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 re 1) (sin.f64 im))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))
(*.f64 1/2 (*.f64 (*.f64 re re) (sin.f64 im)))
(*.f64 (*.f64 1/2 (*.f64 re re)) (sin.f64 im))
(+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2))))
(fma.f64 (sin.f64 im) re (*.f64 1/2 (*.f64 (*.f64 re re) (sin.f64 im))))
(*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))
(*.f64 1/2 (*.f64 (*.f64 re re) (sin.f64 im)))
(*.f64 (*.f64 1/2 (*.f64 re re)) (sin.f64 im))
(+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2))))
(fma.f64 (sin.f64 im) re (*.f64 1/2 (*.f64 (*.f64 re re) (sin.f64 im))))
(*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))
(+.f64 (sin.f64 im) (+.f64 (*.f64 (sin.f64 im) re) (*.f64 1/2 (*.f64 (sin.f64 im) (pow.f64 re 2)))))
(+.f64 (sin.f64 im) (*.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im)))
(fma.f64 (fma.f64 1/2 (*.f64 re re) re) (sin.f64 im) (sin.f64 im))
(*.f64 (+.f64 1 (fma.f64 1/2 (*.f64 re re) re)) (sin.f64 im))

eval88.0ms (1.1%)

Compiler

Compiled 2203 to 1168 computations (47% saved)

prune50.0ms (0.6%)

Pruning

9 alts after pruning (5 fresh and 4 done)

PrunedKeptTotal
New1595164
Fresh000
Picked101
Done145
Total1619170
Error
0b
Counts
170 → 9
Alt Table
Click to see full alt table
StatusErrorProgram
21.0b
(*.f64 (exp.f64 re) im)
41.5b
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
20.4b
(*.f64 (sin.f64 im) (+.f64 re 1))
41.5b
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
0.0b
(*.f64 (exp.f64 re) (sin.f64 im))
41.4b
(*.f64 (+.f64 1 re) im)
20.7b
(sin.f64 im)
41.4b
(+.f64 (*.f64 re im) im)
41.4b
im
Compiler

Compiled 66 to 46 computations (30.3% saved)

localize12.0ms (0.2%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (+.f64 1 re) im)
Compiler

Compiled 13 to 8 computations (38.5% saved)

series5.0ms (0.1%)

Counts
1 → 12
Calls

6 calls:

TimeVariablePointExpression
1.0ms
im
@inf
(*.f64 (+.f64 1 re) im)
1.0ms
im
@0
(*.f64 (+.f64 1 re) im)
1.0ms
im
@-inf
(*.f64 (+.f64 1 re) im)
1.0ms
re
@0
(*.f64 (+.f64 1 re) im)
1.0ms
re
@-inf
(*.f64 (+.f64 1 re) im)

rewrite79.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
604×pow1_binary64
560×add-log-exp_binary64
560×log1p-expm1-u_binary64
560×expm1-log1p-u_binary64
549×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
067
11217
215207
Stop Event
node limit
Counts
1 → 19
Calls
Call 1
Inputs
(*.f64 (+.f64 1 re) im)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 im (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 im (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 re im) im)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 im re) im)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 (pow.f64 re 3)) im) (+.f64 1 (-.f64 (*.f64 re re) re)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 1 (*.f64 re re)) im) (-.f64 1 re))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 im (+.f64 1 (pow.f64 re 3))) (+.f64 1 (-.f64 (*.f64 re re) re)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 im (-.f64 1 (*.f64 re re))) (-.f64 1 re))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 im (*.f64 re im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 im (*.f64 re im)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 im (*.f64 re im))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 im (*.f64 re im))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 im (*.f64 re im)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 im) (+.f64 1 re)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 im (*.f64 re im)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 im (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 im (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (log1p.f64 re) (log.f64 im)))))))

simplify18.0ms (0.2%)

Algorithm
egg-herbie
Rules
14×fma-def_binary64
associate-*r*_binary64
associate-*l*_binary64
*-lft-identity_binary64
*-rgt-identity_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0654
11154
21654
32254
42854
54154
64554
74754
Stop Event
saturated
Counts
31 → 23
Calls
Call 1
Inputs
im
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) im)
(*.f64 re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(*.f64 re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
Outputs
im
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(fma.f64 im re im)
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(fma.f64 im re im)
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(fma.f64 im re im)
(*.f64 re im)
(*.f64 im re)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(fma.f64 im re im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(fma.f64 im re im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(fma.f64 im re im)
(*.f64 re im)
(*.f64 im re)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(fma.f64 im re im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(fma.f64 im re im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(fma.f64 im re im)

localize34.0ms (0.4%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.0b
(pow.f64 re 2)
0.0b
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
1.4b
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
Compiler

Compiled 38 to 28 computations (26.3% saved)

series11.0ms (0.1%)

Counts
3 → 18
Calls

12 calls:

TimeVariablePointExpression
2.0ms
im
@0
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
1.0ms
re
@-inf
(pow.f64 re 2)
1.0ms
im
@inf
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
1.0ms
re
@inf
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
1.0ms
im
@-inf
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)

rewrite101.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
487×log-prod_binary64
479×fma-def_binary64
381×pow-prod-down_binary64
284×pow2_binary64
241×fma-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01129
123929
2307729
Stop Event
node limit
Counts
3 → 136
Calls
Call 1
Inputs
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(pow.f64 re 2)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 1/2 (*.f64 re re)) im) (*.f64 (+.f64 re 1) im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (fma.f64 1/2 (*.f64 re re) 1) im) (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 im (*.f64 1/2 (*.f64 re re))) (*.f64 im (+.f64 re 1)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 im (+.f64 re 1)) (*.f64 im (*.f64 1/2 (*.f64 re re))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) 1)) (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 (pow.f64 re 6) 1/8 (pow.f64 (+.f64 re 1) 3)) im) (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 (pow.f64 re 4) 1/4)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 (*.f64 (pow.f64 re 4) 1/4) (pow.f64 (+.f64 re 1) 2)) im) (-.f64 (fma.f64 1/2 (*.f64 re re) -1) re))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 im (fma.f64 (pow.f64 re 6) 1/8 (pow.f64 (+.f64 re 1) 3))) (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 (pow.f64 re 4) 1/4)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 im (-.f64 (*.f64 (pow.f64 re 4) 1/4) (pow.f64 (+.f64 re 1) 2))) (-.f64 (fma.f64 1/2 (*.f64 re re) -1) re))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 3)) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 re re)) im (*.f64 (+.f64 re 1) im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 re 1) im (*.f64 (*.f64 1/2 (*.f64 re re)) im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im (*.f64 1/2 (*.f64 re re)) (*.f64 im (+.f64 re 1)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im (+.f64 re 1) (*.f64 im (*.f64 1/2 (*.f64 re re))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im (fma.f64 1/2 (*.f64 re re) 1) (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 1/2 (*.f64 re re) 1) im (*.f64 re im))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (*.f64 (pow.f64 re 4) 1/4) (-.f64 (fma.f64 1/2 (*.f64 re re) -1) re)) (/.f64 (pow.f64 (+.f64 re 1) 2) (-.f64 (fma.f64 1/2 (*.f64 re re) -1) re)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))) (cbrt.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 2)) (cbrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))) (sqrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 (pow.f64 re 6) 1/8 (pow.f64 (+.f64 re 1) 3)) (/.f64 1 (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 (pow.f64 re 4) 1/4))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (*.f64 (pow.f64 re 4) 1/4) (pow.f64 (+.f64 re 1) 2)) (/.f64 1 (-.f64 (fma.f64 1/2 (*.f64 re re) -1) re)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 (pow.f64 re 4) 1/4)) (fma.f64 (pow.f64 re 6) 1/8 (pow.f64 (+.f64 re 1) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (fma.f64 1/2 (*.f64 re re) -1) re) (-.f64 (*.f64 (pow.f64 re 4) 1/4) (pow.f64 (+.f64 re 1) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 (pow.f64 re 6) 1/8 (pow.f64 (+.f64 re 1) 3)) (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 (pow.f64 re 4) 1/4)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 (pow.f64 re 6) 1/8 (pow.f64 (+.f64 re 1) 3)) (+.f64 (pow.f64 (+.f64 re 1) 2) (-.f64 (*.f64 (pow.f64 re 4) 1/4) (*.f64 1/2 (*.f64 (*.f64 re re) (+.f64 re 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (pow.f64 re 4) 1/4) (pow.f64 (+.f64 re 1) 2)) (-.f64 (fma.f64 1/2 (*.f64 re re) -1) re))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (fma.f64 (pow.f64 re 6) 1/8 (pow.f64 (+.f64 re 1) 3))) (neg.f64 (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 (pow.f64 re 4) 1/4))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (*.f64 (pow.f64 re 4) 1/4) (pow.f64 (+.f64 re 1) 2))) (neg.f64 (-.f64 (fma.f64 1/2 (*.f64 re re) -1) re)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (fma.f64 1/2 (*.f64 re re) 1) 3) (pow.f64 re 3)) (+.f64 (pow.f64 (fma.f64 1/2 (*.f64 re re) 1) 2) (-.f64 (*.f64 re re) (*.f64 (fma.f64 1/2 (*.f64 re re) 1) re))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (+.f64 re 1) 2) (*.f64 (pow.f64 re 4) 1/4)) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (fma.f64 1/2 (*.f64 re re) 1) 2) (*.f64 re re)) (-.f64 (fma.f64 1/2 (*.f64 re re) 1) re))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 (pow.f64 re 4) 1/4)) (fma.f64 (pow.f64 re 6) 1/8 (pow.f64 (+.f64 re 1) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (-.f64 (fma.f64 1/2 (*.f64 re re) -1) re) (-.f64 (*.f64 (pow.f64 re 4) 1/4) (pow.f64 (+.f64 re 1) 2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 re) (exp.f64 (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 re)) (exp.f64 (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re re)))) (exp.f64 (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (sqrt.f64 (pow.f64 (exp.f64 re) re)) (+.f64 1 (expm1.f64 (+.f64 re 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re re)))) (+.f64 1 (expm1.f64 (+.f64 re 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (+.f64 re 1))) (sqrt.f64 (pow.f64 (exp.f64 re) re))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (+.f64 re 1)) (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re re))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (+.f64 re 1))) (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re re))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (fma.f64 1/2 (*.f64 re re) 1)) (+.f64 1 (expm1.f64 re))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log1p.f64 (+.f64 re (*.f64 1/2 (*.f64 re re)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log1p.f64 (+.f64 re (*.f64 1/2 (*.f64 re re)))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log1p.f64 (+.f64 re (*.f64 1/2 (*.f64 re re))))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log1p.f64 (+.f64 re (*.f64 1/2 (*.f64 re re)))) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1/2 (*.f64 re re) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 re 1 (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 re (*.f64 re 1/2) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 re re) 1/2 (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 re re)) 1 (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 re (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 1/2 (*.f64 re re)) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 re 1) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 1/2 (*.f64 re re) 1) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 re 1) 1 (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (+.f64 re 1)) (pow.f64 (cbrt.f64 (+.f64 re 1)) 2) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 re 1)) 2) (cbrt.f64 (+.f64 re 1)) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cbrt.f64 re) re) (*.f64 (pow.f64 (cbrt.f64 re) 2) 1/2) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 1/2 (*.f64 re re))) (cbrt.f64 (*.f64 (pow.f64 re 4) 1/4)) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 (pow.f64 re 4) 1/4)) (cbrt.f64 (*.f64 1/2 (*.f64 re re))) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 re) (pow.f64 (cbrt.f64 re) 2) (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 re) 2) (cbrt.f64 re) (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 re 1)) (sqrt.f64 (+.f64 re 1)) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 re (sqrt.f64 1/2)) (*.f64 re (sqrt.f64 1/2)) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 re) (sqrt.f64 re) (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 1 (pow.f64 re 3)) (/.f64 1 (fma.f64 re (-.f64 re 1) 1)) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 1 (*.f64 re re)) (/.f64 1 (-.f64 1 re)) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 1/2 (*.f64 re re) 1) 1 re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 1/2 (*.f64 re re) 1)) 2) (cbrt.f64 (fma.f64 1/2 (*.f64 re re) 1)) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 (cbrt.f64 re) re)) (sqrt.f64 (pow.f64 (cbrt.f64 re) 2)) (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 1 (*.f64 re (sqrt.f64 1/2))) (hypot.f64 1 (*.f64 re (sqrt.f64 1/2))) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 re) re (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 (cbrt.f64 re) re)) (pow.f64 (cbrt.f64 re) 2) (+.f64 re 1))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 1/2 (*.f64 re re)) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 re re))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 re) re)) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 re) re))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 re re))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 re re)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 re re) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 re re))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 re) re) (pow.f64 (cbrt.f64 re) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 re) 2) (*.f64 (cbrt.f64 re) re))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 re) (pow.f64 re 3/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 re 3/2) (sqrt.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 re) 5) (cbrt.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 re 4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 re) re))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 re re))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 re 6))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 re re)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (pow.f64 re 6)) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 2 (log.f64 (cbrt.f64 re))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 re) 1) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 re re)) 1) 1))))))

simplify187.0ms (2.4%)

Algorithm
egg-herbie
Rules
1058×fma-def_binary64
751×sqr-pow_binary64
556×fabs-mul_binary64
535×cube-prod_binary64
365×pow-sqr_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
019179
144167
278155
3175155
4432155
51370155
62322155
73099155
83255155
93423155
103621155
113884155
124220155
134602155
145076155
155674155
166387155
177246155
187668155
197986155
Stop Event
node limit
Counts
154 → 153
Calls
Call 1
Inputs
im
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
1
(+.f64 1 re)
(*.f64 1/2 (pow.f64 re 2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(*.f64 1/2 (pow.f64 re 2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
Outputs
im
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(fma.f64 im re im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
(fma.f64 (fma.f64 re 1/2 1) (*.f64 im re) im)
(fma.f64 (*.f64 im re) (fma.f64 re 1/2 1) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(fma.f64 re (fma.f64 re (*.f64 im 1/2) im) im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
(fma.f64 (fma.f64 re 1/2 1) (*.f64 im re) im)
(fma.f64 (*.f64 im re) (fma.f64 re 1/2 1) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(fma.f64 re (fma.f64 re (*.f64 im 1/2) im) im)
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 im (*.f64 re re)))
(*.f64 im (*.f64 re (*.f64 re 1/2)))
(*.f64 re (*.f64 (*.f64 im re) 1/2))
(*.f64 re (*.f64 re (*.f64 im 1/2)))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 1/2 (*.f64 im (*.f64 re re))))
(*.f64 im (fma.f64 1/2 (*.f64 re re) re))
(*.f64 im (fma.f64 re (*.f64 re 1/2) re))
(*.f64 im (*.f64 re (fma.f64 re 1/2 1)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
(fma.f64 (fma.f64 re 1/2 1) (*.f64 im re) im)
(fma.f64 (*.f64 im re) (fma.f64 re 1/2 1) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(fma.f64 re (fma.f64 re (*.f64 im 1/2) im) im)
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
(fma.f64 (fma.f64 re 1/2 1) (*.f64 im re) im)
(fma.f64 (*.f64 im re) (fma.f64 re 1/2 1) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(fma.f64 re (fma.f64 re (*.f64 im 1/2) im) im)
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 im (*.f64 re re)))
(*.f64 im (*.f64 re (*.f64 re 1/2)))
(*.f64 re (*.f64 (*.f64 im re) 1/2))
(*.f64 re (*.f64 re (*.f64 im 1/2)))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 1/2 (*.f64 im (*.f64 re re))))
(*.f64 im (fma.f64 1/2 (*.f64 re re) re))
(*.f64 im (fma.f64 re (*.f64 re 1/2) re))
(*.f64 im (*.f64 re (fma.f64 re 1/2 1)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
(fma.f64 (fma.f64 re 1/2 1) (*.f64 im re) im)
(fma.f64 (*.f64 im re) (fma.f64 re 1/2 1) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(fma.f64 re (fma.f64 re (*.f64 im 1/2) im) im)
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
(fma.f64 (fma.f64 re 1/2 1) (*.f64 im re) im)
(fma.f64 (*.f64 im re) (fma.f64 re 1/2 1) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(fma.f64 re (fma.f64 re (*.f64 im 1/2) im) im)
1
(+.f64 1 re)
(+.f64 re 1)
(*.f64 1/2 (pow.f64 re 2))
(*.f64 1/2 (*.f64 re re))
(*.f64 re (*.f64 re 1/2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(fma.f64 re (*.f64 re 1/2) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 1/2 (pow.f64 re 2))
(*.f64 1/2 (*.f64 re re))
(*.f64 re (*.f64 re 1/2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(fma.f64 re (*.f64 re 1/2) re)
(*.f64 re (fma.f64 re 1/2 1))

localize10.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(+.f64 (*.f64 re im) im)
Compiler

Compiled 12 to 4 computations (66.7% saved)

series5.0ms (0.1%)

Counts
1 → 21
Calls

6 calls:

TimeVariablePointExpression
1.0ms
im
@inf
(+.f64 (*.f64 re im) im)
1.0ms
im
@-inf
(+.f64 (*.f64 re im) im)
1.0ms
im
@0
(+.f64 (*.f64 re im) im)
1.0ms
re
@0
(+.f64 (*.f64 re im) im)
1.0ms
re
@inf
(+.f64 (*.f64 re im) im)

rewrite64.0ms (0.8%)

Algorithm
batch-egg-rewrite
Rules
633×pow1_binary64
590×add-log-exp_binary64
589×log1p-expm1-u_binary64
589×expm1-log1p-u_binary64
577×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
055
11125
216105
Stop Event
node limit
Counts
1 → 40
Calls
Call 1
Inputs
(+.f64 (*.f64 re im) im)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 re im im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (*.f64 re im) 2) (-.f64 (*.f64 re im) im)) (/.f64 (*.f64 im im) (-.f64 (*.f64 re im) im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 im (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 re im im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 re im im)) (pow.f64 (cbrt.f64 (fma.f64 re im im)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 re im im)) 2) (cbrt.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 re im im)) (sqrt.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 (*.f64 re im) 3) (pow.f64 im 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 re im) 2) (*.f64 im (-.f64 im (*.f64 re im))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (*.f64 re im) 2) (*.f64 im im)) (/.f64 1 (-.f64 (*.f64 re im) im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 re 1) im)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 re 1) 1) im)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 re 1) (pow.f64 (cbrt.f64 im) 2)) (cbrt.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 re 1) (sqrt.f64 im)) (sqrt.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 re im) 2) (*.f64 im (-.f64 im (*.f64 re im)))) (+.f64 (pow.f64 (*.f64 re im) 3) (pow.f64 im 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (*.f64 re im) im) (-.f64 (pow.f64 (*.f64 re im) 2) (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 re im) 3) (pow.f64 im 3)) (+.f64 (pow.f64 (*.f64 re im) 2) (*.f64 im (-.f64 im (*.f64 re im)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 re im) 3) (pow.f64 im 3)) (+.f64 (*.f64 im im) (-.f64 (pow.f64 (*.f64 re im) 2) (*.f64 re (*.f64 im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 re im) 2) (*.f64 im im)) (-.f64 (*.f64 re im) im))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 (*.f64 re im) 3) (pow.f64 im 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 re im) 2) (*.f64 im (-.f64 im (*.f64 re im))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 re im) 2) (*.f64 im im))) (neg.f64 (-.f64 (*.f64 re im) im)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 im im) (pow.f64 (*.f64 re im) 2)) (-.f64 im (*.f64 re im)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 re im im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 re im im) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 re im im)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 re im im)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 re im im) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 re im im) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 re im im)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im re im)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 im (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 re im) im)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 im) 2) (cbrt.f64 im) (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 re im)) 2) (cbrt.f64 (*.f64 re im)) im)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 im) (sqrt.f64 im) (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 re im)) (sqrt.f64 (*.f64 re im)) im)))))

simplify33.0ms (0.4%)

Algorithm
egg-herbie
Rules
62×fma-def_binary64
59×fma-neg_binary64
21×unsub-neg_binary64
17×associate-*l*_binary64
15×distribute-rgt-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
013135
13099
26599
313299
422499
532399
638399
Stop Event
saturated
Counts
61 → 46
Calls
Call 1
Inputs
im
(*.f64 re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(*.f64 re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 -1 (*.f64 im (-.f64 (*.f64 -1 re) 1)))
(*.f64 -1 (*.f64 im (-.f64 (*.f64 -1 re) 1)))
(*.f64 -1 (*.f64 im (-.f64 (*.f64 -1 re) 1)))
(*.f64 -1 (*.f64 im (-.f64 (*.f64 -1 re) 1)))
Outputs
im
(*.f64 re im)
(*.f64 im re)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 re im)
(*.f64 im re)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 (+.f64 1 re) im)
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 (+.f64 1 re) im)
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 (+.f64 1 re) im)
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 (+.f64 1 re) im)
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 (+.f64 1 re) im)
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 (+.f64 1 re) im)
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 (+.f64 1 re) im)
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 (+.f64 1 re) im)
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 -1 (*.f64 im (-.f64 (*.f64 -1 re) 1)))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 -1 (*.f64 im (-.f64 (*.f64 -1 re) 1)))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 -1 (*.f64 im (-.f64 (*.f64 -1 re) 1)))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)
(*.f64 -1 (*.f64 im (-.f64 (*.f64 -1 re) 1)))
(+.f64 im (*.f64 im re))
(fma.f64 im re im)

localize24.0ms (0.3%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(*.f64 re (fma.f64 re 1/2 1))
1.4b
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
Compiler

Compiled 25 to 16 computations (36% saved)

series13.0ms (0.2%)

Counts
2 → 36
Calls

9 calls:

TimeVariablePointExpression
6.0ms
im
@0
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
1.0ms
im
@-inf
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
1.0ms
re
@-inf
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
1.0ms
im
@inf
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
1.0ms
re
@inf
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)

rewrite75.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
700×pow1_binary64
643×add-log-exp_binary64
643×log1p-expm1-u_binary64
643×expm1-log1p-u_binary64
630×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0820
115420
2170820
Stop Event
node limit
Counts
2 → 36
Calls
Call 1
Inputs
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
(*.f64 re (fma.f64 re 1/2 1))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 im (*.f64 (*.f64 im re) (fma.f64 re 1/2 1)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 im re) (fma.f64 re 1/2 1)) im)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 (*.f64 im re) (fma.f64 re 1/2 1)) 1) im)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) (pow.f64 (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 2) (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) (sqrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 (*.f64 im re) (fma.f64 re 1/2 1)) 3) (pow.f64 im 3)) (+.f64 (*.f64 (*.f64 (*.f64 im re) (fma.f64 re 1/2 1)) (*.f64 (*.f64 im re) (fma.f64 re 1/2 1))) (-.f64 (*.f64 im im) (*.f64 (*.f64 (*.f64 im re) (fma.f64 re 1/2 1)) im))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 (*.f64 im re) (fma.f64 re 1/2 1)) (*.f64 (*.f64 im re) (fma.f64 re 1/2 1))) (*.f64 im im)) (-.f64 (*.f64 (*.f64 im re) (fma.f64 re 1/2 1)) im))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 re 1/2) re) re)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 re (*.f64 re 1/2)) re)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 re (fma.f64 re 1/2 1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 re (fma.f64 re 1/2 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 re (fma.f64 re 1/2 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 re (fma.f64 re 1/2 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 re (fma.f64 re 1/2 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 re (fma.f64 re 1/2 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 re) (fma.f64 re 1/2 1)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 re (fma.f64 re 1/2 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 re 3) (pow.f64 (fma.f64 re 1/2 1) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (fma.f64 re 1/2 1) 3) (pow.f64 re 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 re (fma.f64 re 1/2 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 re (fma.f64 re 1/2 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 re (fma.f64 re 1/2 1))))))))

simplify142.0ms (1.8%)

Algorithm
egg-herbie
Rules
684×unswap-sqr_binary64
374×fma-neg_binary64
310×distribute-rgt-neg-in_binary64
305×cancel-sign-sub-inv_binary64
293×unsub-neg_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
028393
177351
2199351
3549351
41843351
53797351
65033351
75747351
87141351
97388351
107664351
Stop Event
node limit
Counts
72 → 53
Calls
Call 1
Inputs
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (*.f64 re (+.f64 1 (*.f64 1/2 re)))) 1) im))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (*.f64 re (+.f64 1 (*.f64 1/2 re)))) 1) im))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (*.f64 re (+.f64 1 (*.f64 1/2 re)))) 1) im))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (*.f64 re (+.f64 1 (*.f64 1/2 re)))) 1) im))
im
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
re
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(*.f64 1/2 (pow.f64 re 2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(*.f64 1/2 (pow.f64 re 2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
Outputs
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (*.f64 re (+.f64 1 (*.f64 1/2 re)))) 1) im))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (*.f64 re (+.f64 1 (*.f64 1/2 re)))) 1) im))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (*.f64 re (+.f64 1 (*.f64 1/2 re)))) 1) im))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (*.f64 re (+.f64 1 (*.f64 1/2 re)))) 1) im))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
im
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 im (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 re (*.f64 1/2 im)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 1/2 (*.f64 im (*.f64 re re))))
(*.f64 im (*.f64 re (fma.f64 re 1/2 1)))
(*.f64 (fma.f64 re 1/2 1) (*.f64 re im))
(*.f64 re (*.f64 (fma.f64 re 1/2 1) im))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 im (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 re (*.f64 1/2 im)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 1/2 (*.f64 im (*.f64 re re))))
(*.f64 im (*.f64 re (fma.f64 re 1/2 1)))
(*.f64 (fma.f64 re 1/2 1) (*.f64 re im))
(*.f64 re (*.f64 (fma.f64 re 1/2 1) im))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (fma.f64 re (+.f64 1 (*.f64 re 1/2)) 1) im)
(*.f64 (fma.f64 re (fma.f64 re 1/2 1) 1) im)
(fma.f64 (*.f64 re im) (fma.f64 re -1/2 -1) im)
re
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 re (fma.f64 re -1/2 -1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 re (fma.f64 re -1/2 -1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 re (fma.f64 re -1/2 -1))
(*.f64 1/2 (pow.f64 re 2))
(*.f64 1/2 (*.f64 re re))
(*.f64 re (*.f64 re 1/2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 re (fma.f64 re -1/2 -1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 re (fma.f64 re -1/2 -1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 re (fma.f64 re -1/2 -1))
(*.f64 1/2 (pow.f64 re 2))
(*.f64 1/2 (*.f64 re re))
(*.f64 re (*.f64 re 1/2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 re (fma.f64 re -1/2 -1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 re (fma.f64 re -1/2 -1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 re 1/2 1))
(*.f64 re (fma.f64 re -1/2 -1))

eval81.0ms (1%)

Compiler

Compiled 3631 to 2095 computations (42.3% saved)

prune71.0ms (0.9%)

Pruning

15 alts after pruning (9 fresh and 6 done)

PrunedKeptTotal
New2669275
Fresh101
Picked101
Done167
Total26915284
Error
0b
Counts
284 → 15
Alt Table
Click to see full alt table
StatusErrorProgram
21.0b
(*.f64 (exp.f64 re) im)
41.5b
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
0.0b
(*.f64 (exp.f64 re) (sin.f64 im))
55.8b
(-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1)
61.6b
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
41.4b
(*.f64 (+.f64 1 re) im)
20.4b
(*.f64 (sin.f64 im) (+.f64 re 1))
41.5b
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
61.4b
(*.f64 re im)
41.4b
(+.f64 (*.f64 re im) im)
41.5b
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
61.6b
(*.f64 re (*.f64 re (*.f64 im 1/2)))
41.5b
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
41.4b
im
20.7b
(sin.f64 im)
Compiler

Compiled 216 to 147 computations (31.9% saved)

localize25.0ms (0.3%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(+.f64 (*.f64 (*.f64 re 1/2) re) re)
1.4b
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
Compiler

Compiled 30 to 17 computations (43.3% saved)

series5.0ms (0.1%)

Counts
2 → 36
Calls

9 calls:

TimeVariablePointExpression
1.0ms
im
@0
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
1.0ms
im
@-inf
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
1.0ms
im
@inf
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
0.0ms
re
@inf
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
0.0ms
re
@-inf
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)

rewrite91.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
926×pow1_binary64
860×add-log-exp_binary64
859×log1p-expm1-u_binary64
859×expm1-log1p-u_binary64
842×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0820
117520
2232620
Stop Event
node limit
Counts
2 → 61
Calls
Call 1
Inputs
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
(+.f64 (*.f64 (*.f64 re 1/2) re) re)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 im (*.f64 im (*.f64 re (fma.f64 re 1/2 1))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 im (*.f64 re (fma.f64 re 1/2 1))) im)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 im (*.f64 re (fma.f64 re 1/2 1))) 1) im)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) (pow.f64 (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 2) (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) (sqrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 im (*.f64 re (fma.f64 re 1/2 1))) 3) (pow.f64 im 3)) (+.f64 (*.f64 (*.f64 im (*.f64 re (fma.f64 re 1/2 1))) (*.f64 im (*.f64 re (fma.f64 re 1/2 1)))) (-.f64 (*.f64 im im) (*.f64 (*.f64 im (*.f64 re (fma.f64 re 1/2 1))) im))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 im (*.f64 re (fma.f64 re 1/2 1))) (*.f64 im (*.f64 re (fma.f64 re 1/2 1)))) (*.f64 im im)) (-.f64 (*.f64 im (*.f64 re (fma.f64 re 1/2 1))) im))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 re (fma.f64 re 1/2 1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re (-.f64 (*.f64 re 1/2) 1))) (/.f64 (*.f64 re re) (*.f64 re (-.f64 (*.f64 re 1/2) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 re (fma.f64 re 1/2 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 re (fma.f64 re 1/2 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 re (fma.f64 re 1/2 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 re (fma.f64 re 1/2 1))) (pow.f64 (cbrt.f64 (*.f64 re (fma.f64 re 1/2 1))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 re (fma.f64 re 1/2 1))) 2) (cbrt.f64 (*.f64 re (fma.f64 re 1/2 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 re (fma.f64 re 1/2 1))) (sqrt.f64 (*.f64 re (fma.f64 re 1/2 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 3) (pow.f64 re 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re (-.f64 re (*.f64 re (*.f64 re 1/2)))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re re)) (/.f64 1 (*.f64 re (-.f64 (*.f64 re 1/2) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 re 1/2 1) re)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (fma.f64 re 1/2 1) 1) re)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (fma.f64 re 1/2 1) (pow.f64 (cbrt.f64 re) 2)) (cbrt.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (fma.f64 re 1/2 1) (sqrt.f64 re)) (sqrt.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re (-.f64 re (*.f64 re (*.f64 re 1/2))))) (+.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 3) (pow.f64 re 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (*.f64 re (-.f64 (*.f64 re 1/2) 1)) (-.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re re))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 3) (pow.f64 re 3)) (+.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re (-.f64 re (*.f64 re (*.f64 re 1/2))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 3) (pow.f64 re 3)) (+.f64 (*.f64 re re) (-.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re (*.f64 re (*.f64 re 1/2))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re re)) (*.f64 re (-.f64 (*.f64 re 1/2) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 3) (pow.f64 re 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re (-.f64 re (*.f64 re (*.f64 re 1/2)))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 2) (*.f64 re re))) (neg.f64 (*.f64 re (-.f64 (*.f64 re 1/2) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 re re) (pow.f64 (*.f64 re (*.f64 re 1/2)) 2)) (-.f64 re (*.f64 re (*.f64 re 1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 re (fma.f64 re 1/2 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 re (fma.f64 re 1/2 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 re (fma.f64 re 1/2 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 re (fma.f64 re 1/2 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 re (fma.f64 re 1/2 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (fma.f64 re 1/2 1)) re))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 re (fma.f64 re 1/2 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 re (fma.f64 re 1/2 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 re (fma.f64 re 1/2 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 re (fma.f64 re 1/2 1))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 re (*.f64 re 1/2) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 re 1/2) re re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 re (*.f64 re (*.f64 re 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 re (*.f64 re 1/2)) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 re (*.f64 re 1/2))) 2) (cbrt.f64 (*.f64 re (*.f64 re 1/2))) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 re) 2) (cbrt.f64 re) (*.f64 re (*.f64 re 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 re (*.f64 re 1/2))) (sqrt.f64 (*.f64 re (*.f64 re 1/2))) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 re) (sqrt.f64 re) (*.f64 re (*.f64 re 1/2)))))))

simplify217.0ms (2.8%)

Algorithm
egg-herbie
Rules
617×unswap-sqr_binary64
458×distribute-rgt-neg-in_binary64
349×distribute-lft-neg-in_binary64
278×unsub-neg_binary64
251×fma-neg_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
026393
173387
2166351
3438351
41375351
52900351
64129351
75233351
86521351
96831351
107314351
117746351
Stop Event
node limit
Counts
97 → 78
Calls
Call 1
Inputs
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1) im))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1) im))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1) im))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1) im))
im
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
re
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(*.f64 1/2 (pow.f64 re 2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(*.f64 1/2 (pow.f64 re 2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
Outputs
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1) im))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1) im))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1) im))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (pow.f64 re 2)) re)) 1) im))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
im
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 (*.f64 re re) (*.f64 im 1/2))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 im -1/2))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 1/2 (*.f64 (*.f64 re re) im)))
(*.f64 im (fma.f64 1/2 (*.f64 re re) re))
(*.f64 re (*.f64 im (fma.f64 1/2 re 1)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 (*.f64 re re) (*.f64 im 1/2))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 im -1/2))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 1/2 (*.f64 (*.f64 re re) im)))
(*.f64 im (fma.f64 1/2 (*.f64 re re) re))
(*.f64 re (*.f64 im (fma.f64 1/2 re 1)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(fma.f64 re (*.f64 im (fma.f64 1/2 re 1)) im)
(*.f64 (fma.f64 re (fma.f64 1/2 re 1) 1) im)
re
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 1/2 re 1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 1/2 re 1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 1/2 re 1))
(*.f64 1/2 (pow.f64 re 2))
(*.f64 1/2 (*.f64 re re))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 1/2 re 1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 1/2 re 1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 1/2 re 1))
(*.f64 1/2 (pow.f64 re 2))
(*.f64 1/2 (*.f64 re re))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 1/2 re 1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 1/2 re 1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(*.f64 re (fma.f64 1/2 re 1))

localize3.0ms (0%)

Compiler

Compiled 7 to 3 computations (57.1% saved)

localize8.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
5.7b
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
Compiler

Compiled 20 to 12 computations (40% saved)

series3.0ms (0%)

Counts
1 → 24
Calls

6 calls:

TimeVariablePointExpression
1.0ms
im
@0
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
1.0ms
re
@0
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
1.0ms
im
@inf
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
1.0ms
re
@inf
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
0.0ms
im
@-inf
(*.f64 (*.f64 re (*.f64 re 1/2)) im)

rewrite50.0ms (0.6%)

Algorithm
batch-egg-rewrite
Rules
664×pow1_binary64
611×add-log-exp_binary64
611×log1p-expm1-u_binary64
611×expm1-log1p-u_binary64
598×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0710
114210
2167610
Stop Event
node limit
Counts
1 → 13
Calls
Call 1
Inputs
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 re (*.f64 1/2 (*.f64 re im)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 re (*.f64 1/2 (*.f64 re im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 re (*.f64 1/2 (*.f64 re im))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 re (*.f64 1/2 (*.f64 re im)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sqrt.f64 im) (*.f64 re (sqrt.f64 1/2))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 re (*.f64 1/2 (*.f64 re im))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 im) (*.f64 re (*.f64 re 1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 re (*.f64 1/2 (*.f64 re im))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 re (*.f64 re 1/2)) 3) (pow.f64 im 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 im 3) (pow.f64 (*.f64 re (*.f64 re 1/2)) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 re (*.f64 1/2 (*.f64 re im)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 re (*.f64 1/2 (*.f64 re im)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 re (*.f64 1/2 (*.f64 re im)))))))))

simplify172.0ms (2.2%)

Algorithm
egg-herbie
Rules
2020×unswap-sqr_binary64
1080×sqr-pow_binary64
636×fabs-mul_binary64
612×pow-sqr_binary64
610×cube-prod_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
08240
117240
236240
382240
4219240
5742240
61015240
71429240
81529240
91662240
101831240
112072240
122385240
132757240
143213240
153804240
164510240
175368240
185794240
196110240
206420240
216498240
226532240
Stop Event
node limit
Counts
37 → 15
Calls
Call 1
Inputs
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
Outputs
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 re (*.f64 im (*.f64 1/2 re)))
(*.f64 re (*.f64 1/2 (*.f64 re im)))

localize14.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re))
1.4b
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
Compiler

Compiled 37 to 20 computations (45.9% saved)

series3.0ms (0%)

Counts
2 → 36
Calls

9 calls:

TimeVariablePointExpression
0.0ms
re
@0
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
0.0ms
re
@inf
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
0.0ms
re
@-inf
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
0.0ms
im
@0
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
0.0ms
re
@inf
(+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re))

rewrite74.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
520×fma-def_binary64
488×log-prod_binary64
381×pow-prod-down_binary64
272×pow2_binary64
262×fma-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01025
121725
2296425
Stop Event
node limit
Counts
2 → 115
Calls
Call 1
Inputs
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
(+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 1/2 (*.f64 re re)) im) (*.f64 (+.f64 re 1) im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (fma.f64 1/2 (*.f64 re re) 1) im) (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 im (*.f64 1/2 (*.f64 re re))) (*.f64 im (+.f64 re 1)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 im (+.f64 re 1)) (*.f64 im (*.f64 1/2 (*.f64 re re))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) 1)) (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 1/8 (pow.f64 re 6) (pow.f64 (+.f64 re 1) 3)) im) (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 1/4 (pow.f64 re 4))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 (*.f64 1/4 (pow.f64 re 4)) (pow.f64 (+.f64 re 1) 2)) im) (-.f64 (fma.f64 re (*.f64 1/2 re) -1) re))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 im (fma.f64 1/8 (pow.f64 re 6) (pow.f64 (+.f64 re 1) 3))) (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 1/4 (pow.f64 re 4))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 im (-.f64 (*.f64 1/4 (pow.f64 re 4)) (pow.f64 (+.f64 re 1) 2))) (-.f64 (fma.f64 re (*.f64 1/2 re) -1) re))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 im) (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (pow.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im) 3)) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) im)) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 re re)) im (*.f64 (+.f64 re 1) im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 re 1) im (*.f64 (*.f64 1/2 (*.f64 re re)) im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im (*.f64 1/2 (*.f64 re re)) (*.f64 im (+.f64 re 1)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im (+.f64 re 1) (*.f64 im (*.f64 1/2 (*.f64 re re))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im (fma.f64 1/2 (*.f64 re re) 1) (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 1/2 (*.f64 re re) 1) im (*.f64 re im))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (*.f64 1/4 (pow.f64 re 4)) (-.f64 (fma.f64 re (*.f64 1/2 re) -1) re)) (/.f64 (pow.f64 (+.f64 re 1) 2) (-.f64 (fma.f64 re (*.f64 1/2 re) -1) re)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))) (cbrt.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 2)) (cbrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))) (sqrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 1/8 (pow.f64 re 6) (pow.f64 (+.f64 re 1) 3)) (/.f64 1 (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 1/4 (pow.f64 re 4)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (*.f64 1/4 (pow.f64 re 4)) (pow.f64 (+.f64 re 1) 2)) (/.f64 1 (-.f64 (fma.f64 re (*.f64 1/2 re) -1) re)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 1/4 (pow.f64 re 4))) (fma.f64 1/8 (pow.f64 re 6) (pow.f64 (+.f64 re 1) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (fma.f64 re (*.f64 1/2 re) -1) re) (-.f64 (*.f64 1/4 (pow.f64 re 4)) (pow.f64 (+.f64 re 1) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 1/8 (pow.f64 re 6) (pow.f64 (+.f64 re 1) 3)) (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 1/4 (pow.f64 re 4))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 1/8 (pow.f64 re 6) (pow.f64 (+.f64 re 1) 3)) (+.f64 (pow.f64 (+.f64 re 1) 2) (-.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 1/2 (*.f64 (*.f64 re re) (+.f64 re 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 1/4 (pow.f64 re 4)) (pow.f64 (+.f64 re 1) 2)) (-.f64 (fma.f64 re (*.f64 1/2 re) -1) re))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (fma.f64 1/8 (pow.f64 re 6) (pow.f64 (+.f64 re 1) 3))) (neg.f64 (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 1/4 (pow.f64 re 4)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (*.f64 1/4 (pow.f64 re 4)) (pow.f64 (+.f64 re 1) 2))) (neg.f64 (-.f64 (fma.f64 re (*.f64 1/2 re) -1) re)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (fma.f64 1/2 (*.f64 re re) 1) 3) (pow.f64 re 3)) (+.f64 (pow.f64 (fma.f64 1/2 (*.f64 re re) 1) 2) (-.f64 (*.f64 re re) (*.f64 (fma.f64 1/2 (*.f64 re re) 1) re))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (+.f64 re 1) 2) (*.f64 1/4 (pow.f64 re 4))) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (fma.f64 1/2 (*.f64 re re) 1) 2) (*.f64 re re)) (-.f64 (fma.f64 1/2 (*.f64 re re) 1) re))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (+.f64 re 1) (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))) (*.f64 1/4 (pow.f64 re 4))) (fma.f64 1/8 (pow.f64 re 6) (pow.f64 (+.f64 re 1) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (-.f64 (fma.f64 re (*.f64 1/2 re) -1) re) (-.f64 (*.f64 1/4 (pow.f64 re 4)) (pow.f64 (+.f64 re 1) 2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 re) (exp.f64 (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 re)) (exp.f64 (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re re)))) (exp.f64 (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (sqrt.f64 (exp.f64 re)) re) (+.f64 1 (expm1.f64 (+.f64 re 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re re)))) (+.f64 1 (expm1.f64 (+.f64 re 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (+.f64 re 1))) (pow.f64 (sqrt.f64 (exp.f64 re)) re)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (+.f64 re 1)) (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re re))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (+.f64 re 1))) (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re re))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (fma.f64 1/2 (*.f64 re re) 1)) (+.f64 1 (expm1.f64 re))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log1p.f64 (+.f64 re (*.f64 1/2 (*.f64 re re)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log1p.f64 (+.f64 re (*.f64 1/2 (*.f64 re re)))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log1p.f64 (+.f64 re (*.f64 1/2 (*.f64 re re))))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 1/3 (log1p.f64 (+.f64 re (*.f64 1/2 (*.f64 re re))))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (+.f64 re (fma.f64 1/2 (*.f64 re re) 1)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log1p.f64 (+.f64 re (*.f64 1/2 (*.f64 re re)))) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1/2 (*.f64 re re) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 re 1 (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 re (*.f64 1/2 re) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 re re) 1/2 (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 re re)) 1 (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 re (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 1/2 (*.f64 re re)) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 re 1) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 1/2 (*.f64 re re) 1) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 re 1) 1 (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 1/2 (*.f64 re re))) (cbrt.f64 (*.f64 1/4 (pow.f64 re 4))) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 1/4 (pow.f64 re 4))) (cbrt.f64 (*.f64 1/2 (*.f64 re re))) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 re) (pow.f64 (cbrt.f64 re) 2) (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 re) 2) (cbrt.f64 re) (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (+.f64 re 1)) (pow.f64 (cbrt.f64 (+.f64 re 1)) 2) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 re 1)) 2) (cbrt.f64 (+.f64 re 1)) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cbrt.f64 re) re) (*.f64 (pow.f64 (cbrt.f64 re) 2) 1/2) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 re (sqrt.f64 1/2)) (*.f64 re (sqrt.f64 1/2)) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 re) (sqrt.f64 re) (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 re 1)) (sqrt.f64 (+.f64 re 1)) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 1 (pow.f64 re 3)) (/.f64 1 (fma.f64 re (-.f64 re 1) 1)) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 1 (*.f64 re re)) (/.f64 1 (-.f64 1 re)) (*.f64 1/2 (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 re) re (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 1/2 (*.f64 re re) 1) 1 re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 1/2 (*.f64 re re) 1)) 2) (cbrt.f64 (fma.f64 1/2 (*.f64 re re) 1)) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 (cbrt.f64 re) re)) (sqrt.f64 (pow.f64 (cbrt.f64 re) 2)) (fma.f64 1/2 (*.f64 re re) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 1 (*.f64 re (sqrt.f64 1/2))) (hypot.f64 1 (*.f64 re (sqrt.f64 1/2))) re)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 (cbrt.f64 re) re)) (pow.f64 (cbrt.f64 re) 2) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 1/2 re) 1) re (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 1/2 re) (pow.f64 (cbrt.f64 re) 2)) (cbrt.f64 re) (+.f64 re 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 1/2 re) (sqrt.f64 re)) (sqrt.f64 re) (+.f64 re 1))))))

simplify162.0ms (2.1%)

Algorithm
egg-herbie
Rules
1090×fma-def_binary64
751×sqr-pow_binary64
553×fabs-mul_binary64
535×cube-prod_binary64
365×pow-sqr_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
021425
152401
295365
3194353
4489353
51411353
62357353
73134353
83290353
93458353
103656353
113921353
124257353
134641353
145115353
155709353
166422353
177281353
187705353
Stop Event
node limit
Counts
151 → 135
Calls
Call 1
Inputs
im
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
1
(+.f64 1 re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(*.f64 1/2 (pow.f64 re 2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(*.f64 1/2 (pow.f64 re 2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
Outputs
im
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(fma.f64 im re im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 (*.f64 1/2 (*.f64 re re)) im)
(*.f64 im (*.f64 re (*.f64 re 1/2)))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 (*.f64 1/2 (*.f64 re re)) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) re))
(*.f64 im (fma.f64 re (*.f64 re 1/2) re))
(*.f64 re (*.f64 im (fma.f64 re 1/2 1)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 (*.f64 1/2 (*.f64 re re)) im)
(*.f64 im (*.f64 re (*.f64 re 1/2)))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 (*.f64 1/2 (*.f64 re re)) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) re))
(*.f64 im (fma.f64 re (*.f64 re 1/2) re))
(*.f64 re (*.f64 im (fma.f64 re 1/2 1)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 im (*.f64 re re)) im))
(+.f64 im (*.f64 im (fma.f64 1/2 (*.f64 re re) re)))
(fma.f64 im (fma.f64 re (*.f64 re 1/2) re) im)
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 re (fma.f64 re 1/2 1) 1))
1
(+.f64 1 re)
(+.f64 re 1)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(fma.f64 1/2 (*.f64 re re) (+.f64 re 1))
(+.f64 re (fma.f64 1/2 (*.f64 re re) 1))
(+.f64 re (fma.f64 re (*.f64 re 1/2) 1))
(fma.f64 (fma.f64 re 1/2 1) re 1)
(fma.f64 re (fma.f64 re 1/2 1) 1)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(fma.f64 1/2 (*.f64 re re) (+.f64 re 1))
(+.f64 re (fma.f64 1/2 (*.f64 re re) 1))
(+.f64 re (fma.f64 re (*.f64 re 1/2) 1))
(fma.f64 (fma.f64 re 1/2 1) re 1)
(fma.f64 re (fma.f64 re 1/2 1) 1)
(*.f64 1/2 (pow.f64 re 2))
(*.f64 1/2 (*.f64 re re))
(*.f64 re (*.f64 re 1/2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(fma.f64 re (*.f64 re 1/2) re)
(*.f64 re (fma.f64 re 1/2 1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(fma.f64 1/2 (*.f64 re re) (+.f64 re 1))
(+.f64 re (fma.f64 1/2 (*.f64 re re) 1))
(+.f64 re (fma.f64 re (*.f64 re 1/2) 1))
(fma.f64 (fma.f64 re 1/2 1) re 1)
(fma.f64 re (fma.f64 re 1/2 1) 1)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(fma.f64 1/2 (*.f64 re re) (+.f64 re 1))
(+.f64 re (fma.f64 1/2 (*.f64 re re) 1))
(+.f64 re (fma.f64 re (*.f64 re 1/2) 1))
(fma.f64 (fma.f64 re 1/2 1) re 1)
(fma.f64 re (fma.f64 re 1/2 1) 1)
(*.f64 1/2 (pow.f64 re 2))
(*.f64 1/2 (*.f64 re re))
(*.f64 re (*.f64 re 1/2))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) re)
(fma.f64 1/2 (*.f64 re re) re)
(fma.f64 re (*.f64 re 1/2) re)
(*.f64 re (fma.f64 re 1/2 1))
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(fma.f64 1/2 (*.f64 re re) (+.f64 re 1))
(+.f64 re (fma.f64 1/2 (*.f64 re re) 1))
(+.f64 re (fma.f64 re (*.f64 re 1/2) 1))
(fma.f64 (fma.f64 re 1/2 1) re 1)
(fma.f64 re (fma.f64 re 1/2 1) 1)
(+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re))
(fma.f64 1/2 (*.f64 re re) (+.f64 re 1))
(+.f64 re (fma.f64 1/2 (*.f64 re re) 1))
(+.f64 re (fma.f64 re (*.f64 re 1/2) 1))
(fma.f64 (fma.f64 re 1/2 1) re 1)
(fma.f64 re (fma.f64 re 1/2 1) 1)

localize17.0ms (0.2%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (+.f64 re 1) im)
3.0b
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
5.7b
(*.f64 (*.f64 1/2 (*.f64 re re)) im)
Compiler

Compiled 42 to 22 computations (47.6% saved)

series5.0ms (0.1%)

Counts
3 → 72
Calls

18 calls:

TimeVariablePointExpression
0.0ms
re
@0
(*.f64 (*.f64 1/2 (*.f64 re re)) im)
0.0ms
im
@-inf
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
0.0ms
im
@inf
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
0.0ms
re
@-inf
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
0.0ms
re
@0
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))

rewrite73.0ms (0.9%)

Algorithm
batch-egg-rewrite
Rules
592×log-prod_binary64
566×fma-def_binary64
433×pow-prod-down_binary64
302×pow2_binary64
281×fma-neg_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
01133
124033
2325929
Stop Event
node limit
Counts
3 → 132
Calls
Call 1
Inputs
(*.f64 (*.f64 1/2 (*.f64 re re)) im)
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
(*.f64 (+.f64 re 1) im)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) (*.f64 re re))) 2)) (log.f64 (cbrt.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) (*.f64 re re)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) (*.f64 re re)))) (log.f64 (sqrt.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) (*.f64 re re)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im)) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sqrt.f64 1/2) (*.f64 re (sqrt.f64 im))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 1/8 (*.f64 (pow.f64 re 6) (pow.f64 im 3))) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) (*.f64 re re)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 1/8 (*.f64 (pow.f64 re 6) (pow.f64 im 3))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))) 1))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (fma.f64 re im im) 2) (*.f64 im (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))))) (/.f64 (*.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im)) (*.f64 im (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))) (pow.f64 (cbrt.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))) 2) (cbrt.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 im) 2) (*.f64 (cbrt.f64 im) (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))) (sqrt.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 im) (*.f64 (sqrt.f64 im) (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 1/8 (*.f64 (pow.f64 re 6) (pow.f64 im 3)) (pow.f64 (fma.f64 re im im) 3)) (/.f64 1 (fma.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))) (fma.f64 1/2 (*.f64 re (*.f64 re im)) (neg.f64 (fma.f64 re im im))) (pow.f64 (fma.f64 re im im) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (fma.f64 re im im) 2) (*.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im))) (/.f64 1 (*.f64 im (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)) im)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))) (fma.f64 1/2 (*.f64 re (*.f64 re im)) (neg.f64 (fma.f64 re im im))) (pow.f64 (fma.f64 re im im) 2)) (fma.f64 1/8 (*.f64 (pow.f64 re 6) (pow.f64 im 3)) (pow.f64 (fma.f64 re im im) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (*.f64 im (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re)))) (-.f64 (pow.f64 (fma.f64 re im im) 2) (*.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 1/8 (*.f64 (pow.f64 re 6) (pow.f64 im 3)) (pow.f64 (fma.f64 re im im) 3)) (fma.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))) (fma.f64 1/2 (*.f64 re (*.f64 re im)) (neg.f64 (fma.f64 re im im))) (pow.f64 (fma.f64 re im im) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 1/8 (*.f64 (pow.f64 re 6) (pow.f64 im 3)) (pow.f64 (fma.f64 re im im) 3)) (fma.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im) (-.f64 (pow.f64 (fma.f64 re im im) 2) (*.f64 (*.f64 (fma.f64 re im im) 1/2) (*.f64 re (*.f64 re im))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (fma.f64 re im im) 2) (*.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im))) (*.f64 im (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (fma.f64 1/8 (*.f64 (pow.f64 re 6) (pow.f64 im 3)) (pow.f64 (fma.f64 re im im) 3))) (neg.f64 (fma.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))) (fma.f64 1/2 (*.f64 re (*.f64 re im)) (neg.f64 (fma.f64 re im im))) (pow.f64 (fma.f64 re im im) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (fma.f64 re im im) 2) (*.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im)))) (neg.f64 (*.f64 im (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im)) (pow.f64 (fma.f64 re im im) 2)) (fma.f64 1/2 (*.f64 re (*.f64 re im)) (neg.f64 (fma.f64 re im im))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))) (fma.f64 1/2 (*.f64 re (*.f64 re im)) (neg.f64 (fma.f64 re im im))) (pow.f64 (fma.f64 re im im) 2)) (fma.f64 1/8 (*.f64 (pow.f64 re 6) (pow.f64 im 3)) (pow.f64 (fma.f64 re im im) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (*.f64 im (-.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re)))) (-.f64 (pow.f64 (fma.f64 re im im) 2) (*.f64 (*.f64 1/4 (pow.f64 re 4)) (*.f64 im im)))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 im) (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))))) (exp.f64 (fma.f64 re im im))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) (*.f64 re re)) (+.f64 1 (expm1.f64 (fma.f64 re im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))))) (+.f64 1 (expm1.f64 (fma.f64 re im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (fma.f64 re im im))) (pow.f64 (sqrt.f64 (exp.f64 im)) (*.f64 re re))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (fma.f64 re im im)) (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (fma.f64 re im im))) (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1/2 (*.f64 re (*.f64 re im)) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 re re) (*.f64 1/2 im) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 re re)) im (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im (*.f64 1/2 (*.f64 re re)) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im (+.f64 re 1) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 re (*.f64 re im))) 1 (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 1/2 (*.f64 re (*.f64 re im))) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 re im im) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 re 1) im (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 re im im) 1 (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 1/4 (pow.f64 re 4))) (*.f64 (cbrt.f64 (*.f64 1/2 (*.f64 re re))) im) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 re 1)) 2) (*.f64 (cbrt.f64 (+.f64 re 1)) im) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 im) 2) (*.f64 (cbrt.f64 im) (+.f64 re 1)) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 im) 2) (*.f64 (cbrt.f64 im) (*.f64 1/2 (*.f64 re re))) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (fma.f64 re im im)) (pow.f64 (cbrt.f64 (fma.f64 re im im)) 2) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 re im im)) 2) (cbrt.f64 (fma.f64 re im im)) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))) (pow.f64 (cbrt.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))) 2) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))) 2) (cbrt.f64 (*.f64 1/2 (*.f64 re (*.f64 re im)))) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 re (sqrt.f64 1/2)) (*.f64 (*.f64 re (sqrt.f64 1/2)) im) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 1 (sqrt.f64 re)) (*.f64 (hypot.f64 1 (sqrt.f64 re)) im) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 im) (*.f64 (sqrt.f64 im) (+.f64 re 1)) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 im) (*.f64 (sqrt.f64 im) (*.f64 1/2 (*.f64 re re))) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (fma.f64 re im im)) (sqrt.f64 (fma.f64 re im im)) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (sqrt.f64 1/2) (*.f64 re (sqrt.f64 im))) (*.f64 (sqrt.f64 1/2) (*.f64 re (sqrt.f64 im))) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 re (*.f64 re im)) 1/2 (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 re) (*.f64 re im) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im (pow.f64 (cbrt.f64 (+.f64 re 1)) 2)) (cbrt.f64 (+.f64 re 1)) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im (hypot.f64 1 (sqrt.f64 re))) (hypot.f64 1 (sqrt.f64 re)) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (+.f64 re 1) (pow.f64 (cbrt.f64 im) 2)) (cbrt.f64 im) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (+.f64 re 1) (sqrt.f64 im)) (sqrt.f64 im) (*.f64 1/2 (*.f64 re (*.f64 re im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (*.f64 (*.f64 re (sqrt.f64 1/2)) (cbrt.f64 im)) 2) (cbrt.f64 im) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 1/2 (*.f64 re re)) (sqrt.f64 im)) (sqrt.f64 im) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im 1/2) (*.f64 re re) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im (cbrt.f64 (*.f64 1/4 (pow.f64 re 4)))) (cbrt.f64 (*.f64 1/2 (*.f64 re re))) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im (*.f64 re (sqrt.f64 1/2))) (*.f64 re (sqrt.f64 1/2)) (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im (*.f64 1/2 re)) re (fma.f64 re im im))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 im (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 im (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (fma.f64 re im im))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 re im) im)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 im re) im)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (fma.f64 re im im))) 2)) (log.f64 (cbrt.f64 (exp.f64 (fma.f64 re im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (fma.f64 re im im)))) (log.f64 (sqrt.f64 (exp.f64 (fma.f64 re im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (fma.f64 re im im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 (pow.f64 re 3)) im) (-.f64 (fma.f64 re re 1) re))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 re re -1) im) (+.f64 re -1))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 im (+.f64 1 (pow.f64 re 3))) (-.f64 (fma.f64 re re 1) re))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 im (fma.f64 re re -1)) (+.f64 re -1))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 re im im) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 re im im) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 re im im)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 re im im)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 re im im) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 re im im) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (fma.f64 re im im))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 re im im) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 re im im)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (fma.f64 re im im)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 re im im)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im re im)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im 1 (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im 1 (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 im (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 im (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 im) (pow.f64 (cbrt.f64 im) 2) (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 im) (pow.f64 (cbrt.f64 im) 2) (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 im) 2) (cbrt.f64 im) (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 im) 2) (cbrt.f64 im) (*.f64 im re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 im) (sqrt.f64 im) (*.f64 re im))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 im) (sqrt.f64 im) (*.f64 im re))))))

simplify161.0ms (2.1%)

Algorithm
egg-herbie
Rules
545×fma-def_binary64
498×unsub-neg_binary64
404×distribute-rgt-neg-in_binary64
313×fma-neg_binary64
291×distribute-rgt-neg-out_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
029678
173658
2172618
3487618
41555618
53287618
65041618
76216618
86626618
96818618
107341618
117693618
Stop Event
node limit
Counts
204 → 144
Calls
Call 1
Inputs
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
im
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 1 re)) (*.f64 -1/2 (pow.f64 re 2))) im))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 1 re)) (*.f64 -1/2 (pow.f64 re 2))) im))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 1 re)) (*.f64 -1/2 (pow.f64 re 2))) im))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 1 re)) (*.f64 -1/2 (pow.f64 re 2))) im))
im
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) im)
(+.f64 (*.f64 re im) im)
(*.f64 re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(*.f64 re im)
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(+.f64 im (*.f64 re im))
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
(*.f64 (+.f64 1 re) im)
Outputs
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
im
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(+.f64 (*.f64 re im) (+.f64 (*.f64 1/2 (*.f64 (pow.f64 re 2) im)) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 1/2 (*.f64 (*.f64 re re) im)))
(*.f64 im (+.f64 (*.f64 1/2 (*.f64 re re)) re))
(*.f64 im (fma.f64 1/2 (*.f64 re re) re))
(*.f64 im (*.f64 re (fma.f64 1/2 re 1)))
(*.f64 re (*.f64 im (fma.f64 1/2 re 1)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 1/2 (*.f64 (pow.f64 re 2) im))
(*.f64 1/2 (*.f64 (*.f64 re re) im))
(*.f64 im (*.f64 1/2 (*.f64 re re)))
(*.f64 1/2 (*.f64 re (*.f64 re im)))
(*.f64 (*.f64 re re) (*.f64 1/2 im))
(+.f64 (*.f64 re im) (*.f64 1/2 (*.f64 (pow.f64 re 2) im)))
(fma.f64 re im (*.f64 1/2 (*.f64 (*.f64 re re) im)))
(*.f64 im (+.f64 (*.f64 1/2 (*.f64 re re)) re))
(*.f64 im (fma.f64 1/2 (*.f64 re re) re))
(*.f64 im (*.f64 re (fma.f64 1/2 re 1)))
(*.f64 re (*.f64 im (fma.f64 1/2 re 1)))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(+.f64 (*.f64 re im) (+.f64 im (*.f64 1/2 (*.f64 (pow.f64 re 2) im))))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 1 re)) (*.f64 -1/2 (pow.f64 re 2))) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 1 re)) (*.f64 -1/2 (pow.f64 re 2))) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 1 re)) (*.f64 -1/2 (pow.f64 re 2))) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 1 re)) (*.f64 -1/2 (pow.f64 re 2))) im))
(fma.f64 re im (fma.f64 1/2 (*.f64 (*.f64 re re) im) im))
(*.f64 im (fma.f64 1/2 (*.f64 re re) (+.f64 re 1)))
(fma.f64 im (fma.f64 1/2 (*.f64 re re) re) im)
(*.f64 im (fma.f64 (fma.f64 1/2 re 1) re 1))
(*.f64 im (fma.f64 re (fma.f64 1/2 re 1) 1))
im
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(+.f64 (*.f64 re im) im)
(fma.f64 re im im)
(*.f64 re im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(*.f64 re im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(+.f64 im (*.f64 re im))
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)
(*.f64 (+.f64 1 re) im)
(fma.f64 re im im)

eval110.0ms (1.4%)

Compiler

Compiled 5830 to 3259 computations (44.1% saved)

prune58.0ms (0.8%)

Pruning

17 alts after pruning (6 fresh and 11 done)

PrunedKeptTotal
New3702372
Fresh044
Picked011
Done01010
Total37017387
Error
0b
Counts
387 → 17
Alt Table
Click to see full alt table
StatusErrorProgram
21.0b
(*.f64 (exp.f64 re) im)
41.5b
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
0.0b
(*.f64 (exp.f64 re) (sin.f64 im))
55.8b
(-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1)
61.6b
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
41.4b
(*.f64 (+.f64 1 re) im)
20.4b
(*.f64 (sin.f64 im) (+.f64 re 1))
41.5b
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
61.4b
(*.f64 re im)
58.2b
(-.f64 (+.f64 1 (*.f64 re (*.f64 1/2 (*.f64 re im)))) 1)
41.4b
(+.f64 (*.f64 re im) im)
41.5b
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
61.6b
(*.f64 re (*.f64 re (*.f64 im 1/2)))
41.5b
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
61.9b
(*.f64 (*.f64 re re) (*.f64 im -1/2))
41.4b
im
20.7b
(sin.f64 im)
Compiler

Compiled 151 to 104 computations (31.1% saved)

regimes55.0ms (0.7%)

Counts
22 → 1
Calls
Call 1
Inputs
im
im
(*.f64 re im)
(*.f64 (+.f64 1 re) im)
(+.f64 (*.f64 re im) im)
(*.f64 (*.f64 re re) (*.f64 im -1/2))
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
(*.f64 re (*.f64 re (*.f64 im 1/2)))
(-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1)
(-.f64 (+.f64 1 (*.f64 re (*.f64 1/2 (*.f64 re im)))) 1)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
(sin.f64 im)
(*.f64 (exp.f64 re) im)
(*.f64 (sin.f64 im) (+.f64 re 1))
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
(*.f64 (exp.f64 re) (sin.f64 im))
(+.f64 (sin.f64 im) (*.f64 (sin.f64 im) re))
(fma.f64 im (*.f64 re (fma.f64 re 1/2 1)) im)
(fma.f64 (sin.f64 im) (fma.f64 re (*.f64 re 1/2) re) (sin.f64 im))
Outputs
(*.f64 (exp.f64 re) (sin.f64 im))
Calls

5 calls:

12.0ms
im
11.0ms
(sin.f64 im)
11.0ms
re
11.0ms
(*.f64 (exp.f64 re) (sin.f64 im))
3.0ms
(exp.f64 re)
Results
ErrorSegmentsBranch
0.0b1re
0.0b1im
0.0b1(*.f64 (exp.f64 re) (sin.f64 im))
0.0b1(exp.f64 re)
0.0b1(sin.f64 im)
Compiler

Compiled 179 to 98 computations (45.3% saved)

regimes132.0ms (1.7%)

Counts
18 → 2
Calls
Call 1
Inputs
im
im
(*.f64 re im)
(*.f64 (+.f64 1 re) im)
(+.f64 (*.f64 re im) im)
(*.f64 (*.f64 re re) (*.f64 im -1/2))
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
(*.f64 re (*.f64 re (*.f64 im 1/2)))
(-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1)
(-.f64 (+.f64 1 (*.f64 re (*.f64 1/2 (*.f64 re im)))) 1)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
(sin.f64 im)
(*.f64 (exp.f64 re) im)
(*.f64 (sin.f64 im) (+.f64 re 1))
(fma.f64 im (+.f64 (*.f64 (*.f64 re 1/2) re) re) im)
(*.f64 (+.f64 (*.f64 1/2 (pow.f64 re 2)) (+.f64 1 re)) im)
Outputs
(*.f64 (exp.f64 re) im)
(*.f64 (sin.f64 im) (+.f64 re 1))
Calls

6 calls:

38.0ms
(sin.f64 im)
33.0ms
(sin.f64 im)
25.0ms
im
17.0ms
re
9.0ms
(exp.f64 re)
Results
ErrorSegmentsBranch
0.3b2re
8.7b3im
0.3b2(exp.f64 re)
0.3b2(exp.f64 re)
8.8b3(sin.f64 im)
8.8b3(sin.f64 im)
Compiler

Compiled 148 to 87 computations (41.2% saved)

bsearch0.0ms (0%)

Algorithm
left-value
Steps
TimeLeftRight
0.0ms
0.0
0.9999998786294041
Compiler

Compiled 12 to 9 computations (25% saved)

regimes76.0ms (1%)

Counts
15 → 2
Calls
Call 1
Inputs
im
im
(*.f64 re im)
(*.f64 (+.f64 1 re) im)
(+.f64 (*.f64 re im) im)
(*.f64 (*.f64 re re) (*.f64 im -1/2))
(*.f64 (*.f64 re (*.f64 re 1/2)) im)
(*.f64 re (*.f64 re (*.f64 im 1/2)))
(-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1)
(-.f64 (+.f64 1 (*.f64 re (*.f64 1/2 (*.f64 re im)))) 1)
(*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im)
(*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im)
(+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im))
(sin.f64 im)
(*.f64 (exp.f64 re) im)
Outputs
(*.f64 (exp.f64 re) im)
(sin.f64 im)
Calls

4 calls:

30.0ms
(sin.f64 im)
22.0ms
im
16.0ms
re
4.0ms
(exp.f64 re)
Results
ErrorSegmentsBranch
0.8b2re
8.8b3im
0.8b2(exp.f64 re)
8.9b3(sin.f64 im)
Compiler

Compiled 113 to 65 computations (42.5% saved)

bsearch0.0ms (0%)

Algorithm
left-value
Steps
TimeLeftRight
0.0ms
0.0
0.9999998786294041
Compiler

Compiled 12 to 9 computations (25% saved)

regimes55.0ms (0.7%)

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

3 calls:

34.0ms
re
9.0ms
im
9.0ms
(sin.f64 im)
Results
ErrorSegmentsBranch
16.3b2re
20.7b1im
20.7b1(sin.f64 im)
Compiler

Compiled 105 to 60 computations (42.9% saved)

bsearch22.0ms (0.3%)

Algorithm
binary-search
Steps
TimeLeftRight
22.0ms
-9.737859421947812e+27
-16918366689365664000.0
Compiler

Compiled 12 to 9 computations (25% saved)

regimes158.0ms (2%)

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

2 calls:

140.0ms
im
14.0ms
re
Results
ErrorSegmentsBranch
36.5b2re
41.4b1im
Compiler

Compiled 99 to 56 computations (43.4% saved)

bsearch44.0ms (0.6%)

Algorithm
binary-search
Steps
TimeLeftRight
44.0ms
-462803.104630385
-1.213706032339748e-7
Compiler

Compiled 12 to 9 computations (25% saved)

regimes38.0ms (0.5%)

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

2 calls:

21.0ms
im
14.0ms
re
Results
ErrorSegmentsBranch
36.5b2re
41.4b1im
Compiler

Compiled 86 to 49 computations (43% saved)

bsearch162.0ms (2.1%)

Algorithm
binary-search
Steps
TimeLeftRight
162.0ms
-462803.104630385
-1.213706032339748e-7
Compiler

Compiled 12 to 9 computations (25% saved)

regimes40.0ms (0.5%)

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

2 calls:

28.0ms
re
8.0ms
im
Results
ErrorSegmentsBranch
36.5b2re
41.4b1im
Compiler

Compiled 75 to 43 computations (42.7% saved)

bsearch44.0ms (0.6%)

Algorithm
binary-search
Steps
TimeLeftRight
44.0ms
-462803.104630385
-1.213706032339748e-7
Compiler

Compiled 12 to 9 computations (25% saved)

regimes21.0ms (0.3%)

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

2 calls:

11.0ms
re
7.0ms
im
Results
ErrorSegmentsBranch
36.7b2re
41.4b1im
Compiler

Compiled 64 to 35 computations (45.3% saved)

bsearch23.0ms (0.3%)

Algorithm
binary-search
Steps
TimeLeftRight
23.0ms
-9.737859421947812e+27
-16918366689365664000.0
Compiler

Compiled 12 to 9 computations (25% saved)

regimes34.0ms (0.4%)

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

2 calls:

26.0ms
re
5.0ms
im
Results
ErrorSegmentsBranch
41.4b1re
41.4b1im
Compiler

Compiled 44 to 23 computations (47.7% saved)

regimes9.0ms (0.1%)

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

2 calls:

4.0ms
re
4.0ms
im
Results
ErrorSegmentsBranch
41.4b1re
41.4b1im
Compiler

Compiled 18 to 10 computations (44.4% saved)

regimes9.0ms (0.1%)

Accuracy

Total -20.3b remaining (-49%)

Threshold costs -20.3b (-49%)

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

2 calls:

4.0ms
re
3.0ms
im
Results
ErrorSegmentsBranch
41.4b1re
41.4b1im
Compiler

Compiled 13 to 7 computations (46.2% saved)

simplify10.0ms (0.1%)

Algorithm
egg-herbie
Rules
12×*-commutative_binary64
+-commutative_binary64
sub-neg_binary64
1-exp_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
044219
168219
269219
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(*.f64 (exp.f64 re) (sin.f64 im))
(if (<=.f64 (exp.f64 re) 0) (*.f64 (exp.f64 re) im) (*.f64 (sin.f64 im) (+.f64 re 1)))
(if (<=.f64 (exp.f64 re) 0) (*.f64 (exp.f64 re) im) (sin.f64 im))
(if (<=.f64 re -9737859421947812399546368000) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (sin.f64 im))
(if (<=.f64 re -7950896795499079/17179869184) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im)))
(if (<=.f64 re -7950896795499079/17179869184) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im))
(if (<=.f64 re -7950896795499079/17179869184) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im))
(if (<=.f64 re -9737859421947812399546368000) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (+.f64 (*.f64 re im) im))
(+.f64 (*.f64 re im) im)
(*.f64 (+.f64 1 re) im)
im
Outputs
(*.f64 (exp.f64 re) (sin.f64 im))
(if (<=.f64 (exp.f64 re) 0) (*.f64 (exp.f64 re) im) (*.f64 (sin.f64 im) (+.f64 re 1)))
(if (<=.f64 (exp.f64 re) 0) (*.f64 (exp.f64 re) im) (sin.f64 im))
(if (<=.f64 re -9737859421947812399546368000) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (sin.f64 im))
(if (<=.f64 re -9737859421947812399546368000) (+.f64 (+.f64 1 (+.f64 im (*.f64 re im))) -1) (sin.f64 im))
(if (<=.f64 re -7950896795499079/17179869184) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (+.f64 (*.f64 (+.f64 re 1) im) (*.f64 (*.f64 1/2 (*.f64 re re)) im)))
(if (<=.f64 re -7950896795499079/17179869184) (+.f64 (+.f64 1 (+.f64 im (*.f64 re im))) -1) (+.f64 (*.f64 im (+.f64 re 1)) (*.f64 im (*.f64 1/2 (*.f64 re re)))))
(if (<=.f64 re -7950896795499079/17179869184) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (*.f64 (+.f64 (*.f64 1/2 (*.f64 re re)) (+.f64 1 re)) im))
(if (<=.f64 re -7950896795499079/17179869184) (+.f64 (+.f64 1 (+.f64 im (*.f64 re im))) -1) (*.f64 im (+.f64 (+.f64 re 1) (*.f64 1/2 (*.f64 re re)))))
(if (<=.f64 re -7950896795499079/17179869184) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (*.f64 (+.f64 (*.f64 re (+.f64 1 (*.f64 1/2 re))) 1) im))
(if (<=.f64 re -7950896795499079/17179869184) (+.f64 (+.f64 1 (+.f64 im (*.f64 re im))) -1) (*.f64 im (+.f64 1 (*.f64 re (+.f64 1 (*.f64 re 1/2))))))
(if (<=.f64 re -9737859421947812399546368000) (-.f64 (+.f64 1 (+.f64 im (*.f64 re im))) 1) (+.f64 (*.f64 re im) im))
(if (<=.f64 re -9737859421947812399546368000) (+.f64 (+.f64 1 (+.f64 im (*.f64 re im))) -1) (+.f64 im (*.f64 re im)))
(+.f64 (*.f64 re im) im)
(+.f64 im (*.f64 re im))
(*.f64 (+.f64 1 re) im)
(*.f64 im (+.f64 re 1))
im
Compiler

Compiled 171 to 114 computations (33.3% saved)

soundness0.0ms (0%)

end200.0ms (2.6%)

Compiler

Compiled 151 to 77 computations (49% saved)

Profiling

Loading profile data...