Details

Time bar (total: 5.7s)

analyze0.0ms (0%)

Algorithm
search
Search
TrueOtherFalseIter
0%100%0%0
100%0%0%1
Compiler

Compiled 9 to 7 computations (22.2% saved)

sample2.8s (48.8%)

Results
1.3s2155×body2048valid
886.0ms4513×body256valid
422.0ms1069×body1024valid
180.0ms519×body512valid

preprocess22.0ms (0.4%)

Algorithm
egg-herbie
Rules
39×fma-def_binary64
32×fma-neg_binary64
15×cancel-sign-sub-inv_binary64
12×sub-neg_binary64
10×distribute-rgt-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0711
11211
21611
32311
43211
54911
68611
712211
816811
920411
1023011
1123211
011
Stop Event
saturated
saturated
Calls
Call 1
Inputs
0
Outputs
0
Call 2
Inputs
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Outputs
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Compiler

Compiled 9 to 7 computations (22.2% saved)

simplify31.0ms (0.5%)

Algorithm
egg-herbie
Rules
39×fma-def_binary64
32×fma-neg_binary64
15×cancel-sign-sub-inv_binary64
12×sub-neg_binary64
10×distribute-rgt-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0711
11211
21611
32311
43211
54911
68611
712211
816811
920411
1023011
1123211
Stop Event
saturated
Counts
1 → 1
Calls
Call 1
Inputs
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Outputs
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))

eval0.0ms (0%)

Compiler

Compiled 8 to 6 computations (25% saved)

prune1.0ms (0%)

Pruning

2 alts after pruning (2 fresh and 0 done)

PrunedKeptTotal
New011
Fresh011
Picked000
Done000
Total022
Error
14.9b
Counts
2 → 1
Alt Table
Click to see full alt table
StatusErrorProgram
14.9b
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Compiler

Compiled 8 to 6 computations (25% saved)

localize12.0ms (0.2%)

Local error

Found 1 expressions with local error:

NewErrorProgram
1.7b
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Compiler

Compiled 19 to 12 computations (36.8% saved)

series2.0ms (0%)

Counts
1 → 4
Calls

3 calls:

TimeVariablePointExpression
1.0ms
N
@0
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
1.0ms
N
@-inf
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
1.0ms
N
@inf
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))

rewrite202.0ms (3.5%)

Algorithm
batch-egg-rewrite
Rules
890×pow1_binary64
828×log1p-expm1-u_binary64
828×expm1-log1p-u_binary64
827×add-log-exp_binary64
810×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0711
115611
2221311
Stop Event
node limit
Counts
1 → 36
Calls
Call 1
Inputs
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (atan.f64 (+.f64 N 1)) (neg.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (atan.f64 (+.f64 N 1)) (*.f64 (neg.f64 (atan.f64 N)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) (fma.f64 (neg.f64 (atan.f64 N)) 1 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) (fma.f64 (neg.f64 (cbrt.f64 (atan.f64 N))) (pow.f64 (cbrt.f64 (atan.f64 N)) 2) (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) (fma.f64 (neg.f64 (sqrt.f64 (atan.f64 N))) (sqrt.f64 (atan.f64 N)) (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (neg.f64 (atan.f64 N)) (atan.f64 (+.f64 N 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) (pow.f64 (cbrt.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) 2) (cbrt.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) (sqrt.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 3) (pow.f64 (atan.f64 N) 3)) (/.f64 1 (+.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (*.f64 (atan.f64 N) (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (pow.f64 (atan.f64 N) 2)) (/.f64 1 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (sqrt.f64 (atan.f64 (+.f64 N 1))) (sqrt.f64 (atan.f64 N))) (-.f64 (sqrt.f64 (atan.f64 (+.f64 N 1))) (sqrt.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (*.f64 (atan.f64 N) (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)))) (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 3) (pow.f64 (atan.f64 N) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (pow.f64 (atan.f64 N) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 3) (pow.f64 (atan.f64 N) 3)) (+.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (*.f64 (atan.f64 N) (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (pow.f64 (atan.f64 N) 2)) (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 3) (pow.f64 (atan.f64 N) 3))) (neg.f64 (+.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (*.f64 (atan.f64 N) (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (pow.f64 (atan.f64 N) 2))) (neg.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 3) (pow.f64 (neg.f64 (atan.f64 N)) 3)) (+.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (-.f64 (*.f64 (neg.f64 (atan.f64 N)) (neg.f64 (atan.f64 N))) (*.f64 (atan.f64 (+.f64 N 1)) (neg.f64 (atan.f64 N))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (*.f64 (neg.f64 (atan.f64 N)) (neg.f64 (atan.f64 N)))) (-.f64 (atan.f64 (+.f64 N 1)) (neg.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (*.f64 N (+.f64 N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (atan.f64 (+.f64 N 1)) (neg.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) (cbrt.f64 (atan.f64 (+.f64 N 1))) (neg.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (atan.f64 (+.f64 N 1))) (sqrt.f64 (atan.f64 (+.f64 N 1))) (neg.f64 (atan.f64 N)))))))

simplify67.0ms (1.2%)

Algorithm
egg-herbie
Rules
52×fma-def_binary64
43×fma-neg_binary64
23×cancel-sign-sub-inv_binary64
18×sub-neg_binary64
14×associate--r+_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0952
12044
23144
36144
48844
513444
618244
721544
825844
929444
1032044
1132244
Stop Event
saturated
Counts
40 → 38
Calls
Call 1
Inputs
(-.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) (atan.f64 N))
Outputs
(-.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (neg.f64 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (neg.f64 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (neg.f64 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) (atan.f64 N))
(-.f64 (atan.f64 (-.f64 1 (neg.f64 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))

eval21.0ms (0.4%)

Compiler

Compiled 599 to 388 computations (35.2% saved)

prune42.0ms (0.7%)

Pruning

4 alts after pruning (3 fresh and 1 done)

PrunedKeptTotal
New35338
Fresh000
Picked011
Done000
Total35439
Error
13.8b
Counts
39 → 4
Alt Table
Click to see full alt table
StatusErrorProgram
30.7b
(fma.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) (cbrt.f64 (atan.f64 (+.f64 N 1))) (neg.f64 (atan.f64 N)))
14.0b
(atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (*.f64 N (+.f64 N 1))))
47.8b
(+.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) (fma.f64 (neg.f64 (sqrt.f64 (atan.f64 N))) (sqrt.f64 (atan.f64 N)) (atan.f64 N)))
14.9b
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Compiler

Compiled 58 to 40 computations (31% saved)

localize55.0ms (1%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.3b
(sqrt.f64 (atan.f64 N))
1.7b
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
30.4b
(fma.f64 (neg.f64 (sqrt.f64 (atan.f64 N))) (sqrt.f64 (atan.f64 N)) (atan.f64 N))
Compiler

Compiled 54 to 20 computations (63% saved)

series6.0ms (0.1%)

Counts
2 → 12
Calls

6 calls:

TimeVariablePointExpression
2.0ms
N
@-inf
(fma.f64 (neg.f64 (sqrt.f64 (atan.f64 N))) (sqrt.f64 (atan.f64 N)) (atan.f64 N))
2.0ms
N
@0
(fma.f64 (neg.f64 (sqrt.f64 (atan.f64 N))) (sqrt.f64 (atan.f64 N)) (atan.f64 N))
1.0ms
N
@inf
(fma.f64 (neg.f64 (sqrt.f64 (atan.f64 N))) (sqrt.f64 (atan.f64 N)) (atan.f64 N))
0.0ms
N
@0
(sqrt.f64 (atan.f64 N))
0.0ms
N
@inf
(sqrt.f64 (atan.f64 N))

rewrite108.0ms (1.9%)

Algorithm
batch-egg-rewrite
Rules
463×pow1_binary64
446×add-sqr-sqrt_binary64
438×*-un-lft-identity_binary64
427×add-log-exp_binary64
426×log1p-expm1-u_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0622
112213
2149013
Stop Event
node limit
Counts
2 → 53
Calls
Call 1
Inputs
(fma.f64 (neg.f64 (sqrt.f64 (atan.f64 N))) (sqrt.f64 (atan.f64 N)) (atan.f64 N))
(sqrt.f64 (atan.f64 N))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (atan.f64 N) (atan.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (+.f64 (atan.f64 N) (atan.f64 N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan.f64 N)) (+.f64 (sqrt.f64 (atan.f64 N)) (sqrt.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (atan.f64 N) (atan.f64 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 (atan.f64 N) (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (+.f64 (atan.f64 N) (atan.f64 N))) (pow.f64 (cbrt.f64 (+.f64 (atan.f64 N) (atan.f64 N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (+.f64 (atan.f64 N) (atan.f64 N))) 2) (cbrt.f64 (+.f64 (atan.f64 N) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 (atan.f64 N) (atan.f64 N))) (sqrt.f64 (+.f64 (atan.f64 N) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (atan.f64 N) 3) (pow.f64 (atan.f64 N) 3)) (+.f64 (pow.f64 (atan.f64 N) 2) (-.f64 (pow.f64 (atan.f64 N) 2) (pow.f64 (atan.f64 N) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (atan.f64 N) 2) (pow.f64 (atan.f64 N) 2)) (-.f64 (atan.f64 N) (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 (atan.f64 N) (atan.f64 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 (atan.f64 N) (atan.f64 N)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 (atan.f64 N) (atan.f64 N))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 (atan.f64 N) (atan.f64 N))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 (atan.f64 N) (atan.f64 N)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 (atan.f64 N) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 (atan.f64 N) (atan.f64 N)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 (atan.f64 N) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (+.f64 (atan.f64 N) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 (atan.f64 N) (atan.f64 N))))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (sqrt.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 0 (sqrt.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (sqrt.f64 (atan.f64 N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan.f64 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan.f64 N)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (sqrt.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan.f64 N)) (cbrt.f64 (sqrt.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan.f64 N)) (neg.f64 (cbrt.f64 (sqrt.f64 (atan.f64 N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (sqrt.f64 (atan.f64 N))) (cbrt.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (atan.f64 N) 1/4) (pow.f64 (atan.f64 N) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (atan.f64 N) 1/4) (neg.f64 (pow.f64 (atan.f64 N) 1/4)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 -1 (sqrt.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (pow.f64 (cbrt.f64 (atan.f64 N)) 2)) (sqrt.f64 (cbrt.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/2) (sqrt.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (atan.f64 N)) 2) 1/2) (pow.f64 (cbrt.f64 (atan.f64 N)) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (neg.f64 (cbrt.f64 (atan.f64 N))) (cbrt.f64 (sqrt.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (neg.f64 (pow.f64 (atan.f64 N) 1/4)) (pow.f64 (atan.f64 N) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 -1 (cbrt.f64 (atan.f64 N))) (cbrt.f64 (sqrt.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 -1 (pow.f64 (atan.f64 N) 1/4)) (pow.f64 (atan.f64 N) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 0 (pow.f64 (atan.f64 N) 3/2)) (+.f64 0 (+.f64 (atan.f64 N) (*.f64 0 (sqrt.f64 (atan.f64 N))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 0 (atan.f64 N)) (sqrt.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan.f64 N) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (atan.f64 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan.f64 N) 3/2) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (sqrt.f64 (atan.f64 N))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan.f64 N) 1/4) 2)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (sqrt.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x fabs.f64 (sqrt.f64 (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (sqrt.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan.f64 N) 3/2))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (sqrt.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (sqrt.f64 (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (sqrt.f64 (atan.f64 N))))))))

simplify45.0ms (0.8%)

Algorithm
egg-herbie
Rules
fma-def_binary64
+-commutative_binary64
sub-neg_binary64
*-commutative_binary64
associate-+l-_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0672
11312
21912
32012
42212
52612
63012
73512
Stop Event
saturated
Counts
65 → 55
Calls
Call 1
Inputs
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
Outputs
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0
(+.f64 (atan.f64 N) (*.f64 -1 (atan.f64 N)))
(*.f64 0 (atan.f64 N))
0

localize33.0ms (0.6%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.0b
(*.f64 N (+.f64 N 1))
0.0b
(atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (*.f64 N (+.f64 N 1))))
2.9b
(+.f64 N (-.f64 1 N))
Compiler

Compiled 39 to 26 computations (33.3% saved)

series6.0ms (0.1%)

Counts
3 → 36
Calls

9 calls:

TimeVariablePointExpression
1.0ms
N
@-inf
(*.f64 N (+.f64 N 1))
1.0ms
N
@inf
(*.f64 N (+.f64 N 1))
1.0ms
N
@inf
(atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (*.f64 N (+.f64 N 1))))
1.0ms
N
@0
(*.f64 N (+.f64 N 1))
1.0ms
N
@-inf
(atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (*.f64 N (+.f64 N 1))))

rewrite157.0ms (2.7%)

Algorithm
batch-egg-rewrite
Rules
616×fma-def_binary64
473×log-prod_binary64
352×pow-prod-down_binary64
297×fma-neg_binary64
270×pow2_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0933
121029
2307629
Stop Event
node limit
Counts
3 → 181
Calls
Call 1
Inputs
(+.f64 N (-.f64 1 N))
(atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (*.f64 N (+.f64 N 1))))
(*.f64 N (+.f64 N 1))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 1 (-.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 N 1) N)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (+.f64 N (-.f64 1 N)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (*.f64 N N) (+.f64 (+.f64 N -1) N)) (/.f64 (pow.f64 (-.f64 1 N) 2) (+.f64 (+.f64 N -1) N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 N (-.f64 1 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 N (-.f64 1 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) (pow.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) 2) (cbrt.f64 (+.f64 N (-.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 N (-.f64 1 N))) (sqrt.f64 (+.f64 N (-.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 N 3) (pow.f64 (-.f64 1 N) 3)) (/.f64 1 (fma.f64 (-.f64 1 N) (-.f64 (-.f64 1 N) N) (*.f64 N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (*.f64 N N) (pow.f64 (-.f64 1 N) 2)) (/.f64 1 (+.f64 (+.f64 N -1) N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (sqrt.f64 (+.f64 N 1)) (sqrt.f64 N)) (-.f64 (sqrt.f64 (+.f64 N 1)) (sqrt.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (-.f64 1 N) (-.f64 (-.f64 1 N) N) (*.f64 N N)) (+.f64 (pow.f64 N 3) (pow.f64 (-.f64 1 N) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (+.f64 N -1) N) (-.f64 (*.f64 N N) (pow.f64 (-.f64 1 N) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 N 3) (pow.f64 (-.f64 1 N) 3)) (fma.f64 (-.f64 1 N) (-.f64 (-.f64 1 N) N) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 N 3) (pow.f64 (-.f64 1 N) 3)) (+.f64 (pow.f64 (-.f64 1 N) 2) (-.f64 (*.f64 N N) (*.f64 N (-.f64 1 N)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 N N) (pow.f64 (-.f64 1 N) 2)) (+.f64 (+.f64 N -1) N))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 N 3) (pow.f64 (-.f64 1 N) 3))) (neg.f64 (fma.f64 (-.f64 1 N) (-.f64 (-.f64 1 N) N) (*.f64 N N))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (*.f64 N N) (pow.f64 (-.f64 1 N) 2))) (neg.f64 (+.f64 (+.f64 N -1) N)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (+.f64 N 1) 3) (pow.f64 N 3)) (+.f64 (pow.f64 (+.f64 N 1) 2) (fma.f64 N N (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (+.f64 N 1) 2) (*.f64 N N)) (+.f64 (+.f64 N 1) N))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (-.f64 1 N) 2) (*.f64 N N)) (-.f64 (-.f64 1 N) N))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 N (-.f64 1 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 N (-.f64 1 N)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 N (-.f64 1 N)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 N (-.f64 1 N))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (-.f64 1 N) (-.f64 (-.f64 1 N) N) (*.f64 N N)) (+.f64 (pow.f64 N 3) (pow.f64 (-.f64 1 N) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (+.f64 (+.f64 N -1) N) (-.f64 (*.f64 N N) (pow.f64 (-.f64 1 N) 2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 N (-.f64 1 N)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 N (-.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (+.f64 N (-.f64 1 N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 (+.f64 1 (expm1.f64 (+.f64 N 1))) (exp.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 (exp.f64 (+.f64 N 1)) (+.f64 1 (expm1.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 (+.f64 1 (expm1.f64 (+.f64 N 1))) (+.f64 1 (expm1.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 N)) (exp.f64 (-.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 N) (+.f64 1 (expm1.f64 (-.f64 1 N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 N)) (+.f64 1 (expm1.f64 (-.f64 1 N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (-.f64 1 N))) (exp.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (-.f64 1 N)) (+.f64 1 (expm1.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (-.f64 1 N))) (+.f64 1 (expm1.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (+.f64 N 1)) (exp.f64 (neg.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (+.f64 N 1))) (exp.f64 (neg.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (+.f64 N 1))) (/.f64 1 (exp.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 N (-.f64 1 N)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 N (-.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log1p.f64 (-.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log1p.f64 (-.f64 N N)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log1p.f64 (-.f64 N N))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 1/3 (log1p.f64 (-.f64 N N))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 1/2 (log1p.f64 (-.f64 N N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 N (-.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 N 1 (-.f64 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 N (-.f64 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (-.f64 1 N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 N (-.f64 1 N)) (fma.f64 (neg.f64 N) 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 N (-.f64 1 N)) (fma.f64 (neg.f64 (cbrt.f64 N)) (cbrt.f64 (*.f64 N N)) N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 N (-.f64 1 N)) (fma.f64 -1 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 N 1) (neg.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 1 N) 1 N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 N (-.f64 1 N)) 1 (fma.f64 (neg.f64 N) 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 N (-.f64 1 N)) 1 (fma.f64 (neg.f64 (cbrt.f64 N)) (cbrt.f64 (*.f64 N N)) N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 N (-.f64 1 N)) 1 (fma.f64 -1 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 N 1) 1 (neg.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) (pow.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) 2) (fma.f64 (neg.f64 N) 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) (pow.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) 2) (fma.f64 (neg.f64 (cbrt.f64 N)) (cbrt.f64 (*.f64 N N)) N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) (pow.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) 2) (fma.f64 -1 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) 2) (cbrt.f64 (+.f64 N (-.f64 1 N))) (fma.f64 (neg.f64 N) 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) 2) (cbrt.f64 (+.f64 N (-.f64 1 N))) (fma.f64 (neg.f64 (cbrt.f64 N)) (cbrt.f64 (*.f64 N N)) N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 N (-.f64 1 N))) 2) (cbrt.f64 (+.f64 N (-.f64 1 N))) (fma.f64 -1 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 N) (cbrt.f64 (*.f64 N N)) (-.f64 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 N N)) (cbrt.f64 N) (-.f64 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 N N)) (*.f64 (cbrt.f64 N) 1) (-.f64 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (+.f64 N 1)) (pow.f64 (cbrt.f64 (+.f64 N 1)) 2) (neg.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 N 1)) 2) (cbrt.f64 (+.f64 N 1)) (neg.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (-.f64 1 N)) (pow.f64 (cbrt.f64 (-.f64 1 N)) 2) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (-.f64 1 N)) 2) (cbrt.f64 (-.f64 1 N)) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 N (-.f64 1 N))) (sqrt.f64 (+.f64 N (-.f64 1 N))) (fma.f64 (neg.f64 N) 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 N (-.f64 1 N))) (sqrt.f64 (+.f64 N (-.f64 1 N))) (fma.f64 (neg.f64 (cbrt.f64 N)) (cbrt.f64 (*.f64 N N)) N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 N (-.f64 1 N))) (sqrt.f64 (+.f64 N (-.f64 1 N))) (fma.f64 -1 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 N) (sqrt.f64 N) (-.f64 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 N) (*.f64 (sqrt.f64 N) 1) (-.f64 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 N 1)) (sqrt.f64 (+.f64 N 1)) (neg.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (-.f64 1 N)) (sqrt.f64 (-.f64 1 N)) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 1 (pow.f64 N 3)) (/.f64 1 (+.f64 1 (fma.f64 N N N))) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 (pow.f64 N 3) (pow.f64 (-.f64 1 N) 3)) (/.f64 1 (fma.f64 (-.f64 1 N) (-.f64 (-.f64 1 N) N) (*.f64 N N))) (fma.f64 (neg.f64 N) 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 (pow.f64 N 3) (pow.f64 (-.f64 1 N) 3)) (/.f64 1 (fma.f64 (-.f64 1 N) (-.f64 (-.f64 1 N) N) (*.f64 N N))) (fma.f64 (neg.f64 (cbrt.f64 N)) (cbrt.f64 (*.f64 N N)) N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 (pow.f64 N 3) (pow.f64 (-.f64 1 N) 3)) (/.f64 1 (fma.f64 (-.f64 1 N) (-.f64 (-.f64 1 N) N) (*.f64 N N))) (fma.f64 -1 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 1 (pow.f64 N 3)) (/.f64 1 (-.f64 (fma.f64 N N 1) N)) (neg.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 1 (*.f64 N N)) (/.f64 1 (+.f64 N 1)) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 (*.f64 N N) (pow.f64 (-.f64 1 N) 2)) (/.f64 1 (+.f64 (+.f64 N -1) N)) (fma.f64 (neg.f64 N) 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 (*.f64 N N) (pow.f64 (-.f64 1 N) 2)) (/.f64 1 (+.f64 (+.f64 N -1) N)) (fma.f64 (neg.f64 (cbrt.f64 N)) (cbrt.f64 (*.f64 N N)) N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 (*.f64 N N) (pow.f64 (-.f64 1 N) 2)) (/.f64 1 (+.f64 (+.f64 N -1) N)) (fma.f64 -1 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 N N -1) (/.f64 1 (+.f64 N -1)) (neg.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 (sqrt.f64 (+.f64 N 1)) (sqrt.f64 N)) (-.f64 (sqrt.f64 (+.f64 N 1)) (sqrt.f64 N)) (fma.f64 (neg.f64 N) 1 N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 (sqrt.f64 (+.f64 N 1)) (sqrt.f64 N)) (-.f64 (sqrt.f64 (+.f64 N 1)) (sqrt.f64 N)) (fma.f64 (neg.f64 (cbrt.f64 N)) (cbrt.f64 (*.f64 N N)) N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 (sqrt.f64 (+.f64 N 1)) (sqrt.f64 N)) (-.f64 (sqrt.f64 (+.f64 N 1)) (sqrt.f64 N)) (fma.f64 -1 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (-.f64 1 (pow.f64 N 3)) (+.f64 1 (pow.f64 (fma.f64 N N N) 3))) (fma.f64 (fma.f64 N N N) (-.f64 (fma.f64 N N N) 1) 1) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (-.f64 1 (pow.f64 N 3)) (-.f64 1 (pow.f64 (fma.f64 N N N) 2))) (-.f64 1 (fma.f64 N N N)) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (-.f64 1 (*.f64 N N)) (+.f64 1 (pow.f64 N 3))) (-.f64 (fma.f64 N N 1) N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (-.f64 1 (*.f64 N N)) (fma.f64 N N -1)) (+.f64 N -1) N)))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))))) 2)) (log.f64 (cbrt.f64 (exp.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))))) (log.f64 (sqrt.f64 (exp.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))) (pow.f64 (cbrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))) 2) (cbrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))) (sqrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N))))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (fma.f64 N N N)))))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 N (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (fma.f64 N N N))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 N N) N)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 N N) 1) N)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (fma.f64 N N N))) 2)) (log.f64 (cbrt.f64 (exp.f64 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (fma.f64 N N N)))) (log.f64 (sqrt.f64 (exp.f64 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 N N N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 N 6) (pow.f64 N 3)) (+.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) (pow.f64 N 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 (pow.f64 N 3)) N) (-.f64 (fma.f64 N N 1) N))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 N N -1) N) (+.f64 N -1))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 N (+.f64 1 (pow.f64 N 3))) (-.f64 (fma.f64 N N 1) N))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 N (fma.f64 N N -1)) (+.f64 N -1))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 N N N) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 N N N)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (hypot.f64 N (sqrt.f64 N)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 N N N) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 N) (exp.f64 (*.f64 N N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 N)) (exp.f64 (*.f64 N N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (*.f64 N N)) (+.f64 1 (expm1.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 N N N) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (*.f64 (log1p.f64 (fma.f64 N N N)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (fma.f64 N N N)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (fma.f64 N N N))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (hypot.f64 N (sqrt.f64 N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (fma.f64 N N N))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 N N N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 N 1 (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 N (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 1 (fma.f64 N N N)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 N N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 1 (fma.f64 N N N)) 1 -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N N) 1 N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (+.f64 1 (fma.f64 N N N))) (pow.f64 (cbrt.f64 (+.f64 1 (fma.f64 N N N))) 2) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 1 (fma.f64 N N N))) 2) (cbrt.f64 (+.f64 1 (fma.f64 N N N))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 N) (cbrt.f64 (*.f64 N N)) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 N N)) (cbrt.f64 N) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 N N)) (*.f64 (cbrt.f64 N) N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 N N)) (*.f64 (cbrt.f64 N) 1) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 1 (hypot.f64 N (sqrt.f64 N))) (hypot.f64 1 (hypot.f64 N (sqrt.f64 N))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 N) (sqrt.f64 N) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 N) (pow.f64 N 3/2) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 N) (*.f64 (sqrt.f64 N) 1) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 1 (pow.f64 (fma.f64 N N N) 3)) (/.f64 1 (fma.f64 (fma.f64 N N N) (-.f64 (fma.f64 N N N) 1) 1)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 1 (pow.f64 (fma.f64 N N N) 2)) (/.f64 1 (-.f64 1 (fma.f64 N N N))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cbrt.f64 N) N) (cbrt.f64 (*.f64 N N)) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 N 3/2) (sqrt.f64 N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 5) (cbrt.f64 N) N)))))

simplify96.0ms (1.7%)

Algorithm
egg-herbie
Rules
968×fma-neg_binary64
532×unswap-sqr_binary64
447×distribute-rgt-neg-in_binary64
354×cancel-sign-sub-inv_binary64
329×fma-def_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
019240
144198
267198
3163198
4583198
51634198
63616198
75643198
87339198
Stop Event
node limit
Counts
217 → 190
Calls
Call 1
Inputs
1
1
1
1
1
1
1
1
1
1
1
1
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
N
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(pow.f64 N 2)
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(pow.f64 N 2)
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
Outputs
1
1
1
1
1
1
1
1
1
1
1
1
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (fma.f64 N N (+.f64 1 N)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
N
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(pow.f64 N 2)
(*.f64 N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(pow.f64 N 2)
(*.f64 N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)

localize26.0ms (0.4%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.5b
(pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2)
1.0b
(cbrt.f64 (atan.f64 (+.f64 N 1)))
28.1b
(fma.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) (cbrt.f64 (atan.f64 (+.f64 N 1))) (neg.f64 (atan.f64 N)))
Compiler

Compiled 44 to 31 computations (29.5% saved)

series9.0ms (0.2%)

Counts
3 → 36
Calls

9 calls:

TimeVariablePointExpression
3.0ms
N
@0
(fma.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) (cbrt.f64 (atan.f64 (+.f64 N 1))) (neg.f64 (atan.f64 N)))
2.0ms
N
@inf
(fma.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) (cbrt.f64 (atan.f64 (+.f64 N 1))) (neg.f64 (atan.f64 N)))
2.0ms
N
@-inf
(fma.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) (cbrt.f64 (atan.f64 (+.f64 N 1))) (neg.f64 (atan.f64 N)))
0.0ms
N
@-inf
(pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2)
0.0ms
N
@-inf
(cbrt.f64 (atan.f64 (+.f64 N 1)))

rewrite109.0ms (1.9%)

Algorithm
batch-egg-rewrite
Rules
886×pow1_binary64
821×add-log-exp_binary64
821×log1p-expm1-u_binary64
821×expm1-log1p-u_binary64
803×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01132
122630
2260830
Stop Event
node limit
Counts
3 → 58
Calls
Call 1
Inputs
(fma.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) (cbrt.f64 (atan.f64 (+.f64 N 1))) (neg.f64 (atan.f64 N)))
(cbrt.f64 (atan.f64 (+.f64 N 1)))
(pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (atan.f64 N) (atan.f64 (+.f64 N 1)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 (atan.f64 (+.f64 N 1)) 0) (atan.f64 N))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) (pow.f64 (cbrt.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) 2) (cbrt.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) (sqrt.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 3) (pow.f64 (atan.f64 N) 3)) (+.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (-.f64 (pow.f64 (atan.f64 N) 2) (*.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) (pow.f64 (atan.f64 N) 2)) (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (cbrt.f64 (atan.f64 (+.f64 N 1)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (cbrt.f64 (atan.f64 (+.f64 N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) 2) (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) (pow.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 1/6) (pow.f64 (atan.f64 (+.f64 N 1)) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (cbrt.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 4))) (sqrt.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (cbrt.f64 (atan.f64 (+.f64 N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (atan.f64 (+.f64 N 1))) 1/3) (pow.f64 (sqrt.f64 (atan.f64 (+.f64 N 1))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan.f64 (+.f64 N 1)) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 1/6) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x fabs.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) (cbrt.f64 (atan.f64 (+.f64 N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) 2) (cbrt.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 4)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) 2) (*.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) (cbrt.f64 (atan.f64 (+.f64 N 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 4)) (pow.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan.f64 (+.f64 N 1))) (pow.f64 (atan.f64 (+.f64 N 1)) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 1/6) (*.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 1/6) (cbrt.f64 (atan.f64 (+.f64 N 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) (pow.f64 (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))) 2)) (cbrt.f64 (cbrt.f64 (atan.f64 (+.f64 N 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 2 (log.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2)))))))

simplify140.0ms (2.4%)

Algorithm
egg-herbie
Rules
1003×fma-def_binary64
772×fma-neg_binary64
506×associate-*l*_binary64
390×distribute-rgt-neg-in_binary64
361×associate-*r*_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
023396
168360
2104360
3168360
4286360
5664360
62252360
73256360
84885360
96855360
Stop Event
node limit
Counts
94 → 66
Calls
Call 1
Inputs
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (-.f64 1 (*.f64 -1 N)))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (-.f64 1 (*.f64 -1 N)))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (-.f64 1 (*.f64 -1 N)))) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (-.f64 1 (*.f64 -1 N)))) (atan.f64 N))
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 1/3)
(pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 1/3)
(pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 1/3)
(pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 1/3)
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 2) 1/3)
(pow.f64 (pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 2) 1/3)
Outputs
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (+.f64 N 1))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (-.f64 1 (*.f64 -1 N)))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (-.f64 1 (*.f64 -1 N)))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (-.f64 1 (*.f64 -1 N)))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(-.f64 (*.f64 (pow.f64 1 1/3) (atan.f64 (-.f64 1 (*.f64 -1 N)))) (atan.f64 N))
(-.f64 (*.f64 1 (atan.f64 (+.f64 1 N))) (atan.f64 N))
(-.f64 (atan.f64 (+.f64 1 N)) (atan.f64 N))
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (+.f64 N 1)) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 1/3)
(cbrt.f64 (atan.f64 (+.f64 1 N)))
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (+.f64 N 1)) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))
(pow.f64 (pow.f64 (atan.f64 (-.f64 1 (*.f64 -1 N))) 2) 1/3)
(cbrt.f64 (pow.f64 (atan.f64 (+.f64 1 N)) 2))

eval224.0ms (3.9%)

Compiler

Compiled 8177 to 4736 computations (42.1% saved)

prune57.0ms (1%)

Pruning

2 alts after pruning (1 fresh and 1 done)

PrunedKeptTotal
New4031404
Fresh000
Picked101
Done213
Total4062408
Error
0.5b
Counts
408 → 2
Alt Table
Click to see full alt table
StatusErrorProgram
0.5b
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
14.9b
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Compiler

Compiled 18 to 14 computations (22.2% saved)

localize11.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(*.f64 N (+.f64 N 1))
0.5b
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
Compiler

Compiled 27 to 19 computations (29.6% saved)

series27.0ms (0.5%)

Counts
1 → 8
Calls

3 calls:

TimeVariablePointExpression
26.0ms
N
@inf
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
0.0ms
N
@0
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
0.0ms
N
@-inf
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))

rewrite54.0ms (0.9%)

Algorithm
batch-egg-rewrite
Rules
798×pow1_binary64
742×log1p-expm1-u_binary64
742×expm1-log1p-u_binary64
741×add-log-exp_binary64
727×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0713
115211
2205711
Stop Event
node limit
Counts
1 → 16
Calls
Call 1
Inputs
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))))

simplify80.0ms (1.4%)

Algorithm
egg-herbie
Rules
968×fma-neg_binary64
532×unswap-sqr_binary64
451×distribute-rgt-neg-in_binary64
353×cancel-sign-sub-inv_binary64
312×neg-sub0_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
014104
13388
25488
315188
457588
5163888
6362788
7566288
8735988
Stop Event
node limit
Counts
24 → 19
Calls
Call 1
Inputs
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
Outputs
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (*.f64 N N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (fma.f64 N N (-.f64 N -1)))
(atan2.f64 1 (-.f64 N (fma.f64 N N -1)))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (*.f64 N N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (fma.f64 N N (-.f64 N -1)))
(atan2.f64 1 (-.f64 N (fma.f64 N N -1)))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (*.f64 N N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (fma.f64 N N (-.f64 N -1)))
(atan2.f64 1 (-.f64 N (fma.f64 N N -1)))
(atan2.f64 1 (+.f64 N (+.f64 1 (pow.f64 N 2))))
(atan2.f64 1 (+.f64 N (+.f64 1 (*.f64 N N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (fma.f64 N N (-.f64 N -1)))
(atan2.f64 1 (-.f64 N (fma.f64 N N -1)))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 N (+.f64 1 (*.f64 N N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (fma.f64 N N (-.f64 N -1)))
(atan2.f64 1 (-.f64 N (fma.f64 N N -1)))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 N (+.f64 1 (*.f64 N N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (fma.f64 N N (-.f64 N -1)))
(atan2.f64 1 (-.f64 N (fma.f64 N N -1)))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 N (+.f64 1 (*.f64 N N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (fma.f64 N N (-.f64 N -1)))
(atan2.f64 1 (-.f64 N (fma.f64 N N -1)))
(atan2.f64 1 (+.f64 1 (*.f64 N (-.f64 1 (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 N (+.f64 1 (*.f64 N N))))
(atan2.f64 1 (+.f64 N (fma.f64 N N 1)))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (fma.f64 N N (-.f64 N -1)))
(atan2.f64 1 (-.f64 N (fma.f64 N N -1)))

eval66.0ms (1.2%)

Compiler

Compiled 1001 to 611 computations (39% saved)

prune15.0ms (0.3%)

Pruning

7 alts after pruning (5 fresh and 2 done)

PrunedKeptTotal
New73578
Fresh000
Picked011
Done011
Total73780
Error
0.5b
Counts
80 → 7
Alt Table
Click to see full alt table
StatusErrorProgram
29.5b
(atan2.f64 1 (+.f64 1 N))
1.9b
(pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 3)
0.5b
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
14.9b
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
1.4b
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
1.1b
(pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)
23.2b
(atan2.f64 1 (+.f64 1 (/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))))
Compiler

Compiled 130 to 96 computations (26.2% saved)

localize18.0ms (0.3%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.5b
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
0.6b
(pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)
14.3b
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
Compiler

Compiled 42 to 22 computations (47.6% saved)

series6.0ms (0.1%)

Counts
3 → 36
Calls

9 calls:

TimeVariablePointExpression
3.0ms
N
@inf
(pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)
1.0ms
N
@-inf
(pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)
1.0ms
N
@0
(pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)
1.0ms
N
@0
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
1.0ms
N
@inf
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))

rewrite70.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
735×pow1_binary64
684×add-log-exp_binary64
683×log1p-expm1-u_binary64
683×expm1-log1p-u_binary64
669×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0935
118635
2192435
Stop Event
node limit
Counts
3 → 58
Calls
Call 1
Inputs
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (cbrt.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4) (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)) (sqrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/2) (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) 1/2) (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 3/2) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4) 2)))) (#(struct:change #<rule egg-rr> (2) ((x fabs.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 3/2))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (*.f64 (cbrt.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4) (*.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4) (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4)) (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (cbrt.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (*.f64 (cbrt.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4) (*.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4) (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4)) (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (cbrt.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))))

simplify34.0ms (0.6%)

Algorithm
egg-herbie
Rules
25×fma-def_binary64
+-commutative_binary64
distribute-lft-in_binary64
distribute-rgt1-in_binary64
*-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
07420
112420
218420
327420
435420
539420
651420
764420
869420
970420
Stop Event
saturated
Counts
94 → 45
Calls
Call 1
Inputs
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
Outputs
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(atan2.f64 1 (+.f64 (fma.f64 N N N) 1))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))

localize6.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(atan2.f64 1 (+.f64 1 N))
Compiler

Compiled 11 to 8 computations (27.3% saved)

series1.0ms (0%)

Counts
1 → 12
Calls

3 calls:

TimeVariablePointExpression
0.0ms
N
@0
(atan2.f64 1 (+.f64 1 N))
0.0ms
N
@-inf
(atan2.f64 1 (+.f64 1 N))
0.0ms
N
@inf
(atan2.f64 1 (+.f64 1 N))

rewrite41.0ms (0.7%)

Algorithm
batch-egg-rewrite
Rules
495×pow1_binary64
482×add-sqr-sqrt_binary64
460×add-log-exp_binary64
460×log1p-expm1-u_binary64
460×expm1-log1p-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
057
11017
212437
Stop Event
node limit
Counts
1 → 16
Calls
Call 1
Inputs
(atan2.f64 1 (+.f64 1 N))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (atan2.f64 1 (+.f64 1 N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (atan2.f64 1 (+.f64 1 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (atan2.f64 1 (+.f64 1 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 N))) (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 N))) 2) (cbrt.f64 (atan2.f64 1 (+.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 N))) (sqrt.f64 (atan2.f64 1 (+.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan2.f64 1 (+.f64 1 N)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (+.f64 1 N)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 N))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 N))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 N)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (atan2.f64 1 (+.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 N)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (atan2.f64 1 (+.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (atan2.f64 1 (+.f64 1 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (atan2.f64 1 (+.f64 1 N))))))))

simplify13.0ms (0.2%)

Algorithm
egg-herbie
Rules
13×fma-def_binary64
11×fma-neg_binary64
cancel-sign-sub-inv_binary64
associate--r+_binary64
sub-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0984
11984
22584
34884
46784
59784
611284
711684
Stop Event
saturated
Counts
28 → 19
Calls
Call 1
Inputs
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (-.f64 1 (*.f64 -1 N)))
(atan2.f64 1 (-.f64 1 (*.f64 -1 N)))
(atan2.f64 1 (-.f64 1 (*.f64 -1 N)))
(atan2.f64 1 (-.f64 1 (*.f64 -1 N)))
Outputs
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (+.f64 N 1))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (-.f64 1 (*.f64 -1 N)))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (-.f64 1 (*.f64 -1 N)))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (-.f64 1 (*.f64 -1 N)))
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (-.f64 1 (*.f64 -1 N)))
(atan2.f64 1 (+.f64 1 N))

localize7.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.5b
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
Compiler

Compiled 18 to 9 computations (50% saved)

series1.0ms (0%)

Counts
1 → 12
Calls

3 calls:

TimeVariablePointExpression
0.0ms
N
@0
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
0.0ms
N
@-inf
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
0.0ms
N
@inf
(atan2.f64 1 (+.f64 1 (*.f64 N N)))

rewrite48.0ms (0.8%)

Algorithm
batch-egg-rewrite
Rules
563×pow1_binary64
525×add-log-exp_binary64
524×log1p-expm1-u_binary64
524×expm1-log1p-u_binary64
513×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0610
11218
214828
Stop Event
node limit
Counts
1 → 16
Calls
Call 1
Inputs
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (atan2.f64 1 (fma.f64 N N 1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (atan2.f64 1 (fma.f64 N N 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (atan2.f64 1 (fma.f64 N N 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (fma.f64 N N 1))) (pow.f64 (cbrt.f64 (atan2.f64 1 (fma.f64 N N 1))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (fma.f64 N N 1))) 2) (cbrt.f64 (atan2.f64 1 (fma.f64 N N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan2.f64 1 (fma.f64 N N 1))) (sqrt.f64 (atan2.f64 1 (fma.f64 N N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan2.f64 1 (fma.f64 N N 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (fma.f64 N N 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (atan2.f64 1 (fma.f64 N N 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (atan2.f64 1 (fma.f64 N N 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (atan2.f64 1 (fma.f64 N N 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (atan2.f64 1 (fma.f64 N N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan2.f64 1 (fma.f64 N N 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (atan2.f64 1 (fma.f64 N N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (atan2.f64 1 (fma.f64 N N 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (atan2.f64 1 (fma.f64 N N 1))))))))

simplify166.0ms (2.9%)

Algorithm
egg-herbie
Rules
1366×sqr-pow_binary64
695×pow-sqr_binary64
617×cube-prod_binary64
613×fabs-mul_binary64
434×unswap-sqr_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
07120
11496
22196
33296
46196
516096
658196
7144996
8163396
9181796
10202596
11231896
12271396
13319696
14376296
15444896
16528396
17568196
18597196
19625196
20632596
21636196
22730296
Stop Event
node limit
Counts
28 → 18
Calls
Call 1
Inputs
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
Outputs
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))
(atan2.f64 1 (+.f64 1 (pow.f64 N 2)))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (fma.f64 N N 1))

localize27.0ms (0.5%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.5b
(atan2.f64 1 (+.f64 1 (/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))))
12.4b
(-.f64 (pow.f64 N 4) (*.f64 N N))
34.2b
(/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))
Compiler

Compiled 69 to 29 computations (58% saved)

series5.0ms (0.1%)

Counts
3 → 36
Calls

9 calls:

TimeVariablePointExpression
1.0ms
N
@0
(/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))
1.0ms
N
@inf
(/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))
1.0ms
N
@-inf
(/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))
1.0ms
N
@-inf
(atan2.f64 1 (+.f64 1 (/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))))
0.0ms
N
@inf
(atan2.f64 1 (+.f64 1 (/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))))

rewrite85.0ms (1.5%)

Algorithm
batch-egg-rewrite
Rules
506×fma-def_binary64
469×log-prod_binary64
339×fma-neg_binary64
256×pow2_binary64
207×pow-unpow_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01254
127124
2402724
Stop Event
node limit
Counts
3 → 272
Calls
Call 1
Inputs
(/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(atan2.f64 1 (+.f64 1 (/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 N (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 N N) N)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (fma.f64 N N N))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N N)) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (fma.f64 N N N))) 2)) (log.f64 (cbrt.f64 (exp.f64 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (fma.f64 N N N)))) (log.f64 (sqrt.f64 (exp.f64 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (*.f64 N N) N)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 (fma.f64 N N N) 1) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 0 (fma.f64 N N N))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N N)) (/.f64 N (/.f64 (fma.f64 N N N) N)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (fma.f64 N N 0) N)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 N (+.f64 N -1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (fma.f64 N N N) 2) (/.f64 1 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 N N N) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 N N N) (*.f64 (fma.f64 N N N) (/.f64 1 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 N N N))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 N N N)) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (cbrt.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (neg.f64 (cbrt.f64 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (*.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (/.f64 1 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (hypot.f64 N (sqrt.f64 N)) (hypot.f64 N (sqrt.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (hypot.f64 N (sqrt.f64 N)) (neg.f64 (hypot.f64 N (sqrt.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (fma.f64 N N N)) (pow.f64 (fma.f64 N N N) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 -1 (fma.f64 N N N))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4)) (sqrt.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) 1) (pow.f64 (cbrt.f64 (fma.f64 N N N)) -1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) -2) (/.f64 (pow.f64 (fma.f64 N N N) 2) (cbrt.f64 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (fma.f64 N N N) -1/2) (pow.f64 (fma.f64 N N N) 3/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (hypot.f64 N (sqrt.f64 N))) (/.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (hypot.f64 N (sqrt.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (neg.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))) (cbrt.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (neg.f64 (hypot.f64 N (sqrt.f64 N))) (hypot.f64 N (sqrt.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 N N N) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) 6) 1/6)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 N N N)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) 3/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (hypot.f64 N (sqrt.f64 N)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 1 (fma.f64 N N N)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (/.f64 1 (fma.f64 N N N)) 1) -1)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (fma.f64 N N N))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 N N N) 2))))) (#(struct:change #<rule egg-rr> (2) ((x fabs.f64 (fma.f64 N N N))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 1 (+.f64 1 (expm1.f64 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 (+.f64 1 (expm1.f64 (*.f64 N N))) (exp.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 (pow.f64 (exp.f64 N) N) (+.f64 1 (expm1.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 (+.f64 1 (expm1.f64 (*.f64 N N))) (+.f64 1 (expm1.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 N)) (pow.f64 (exp.f64 N) N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 N) (+.f64 1 (expm1.f64 (*.f64 N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 N)) (+.f64 1 (expm1.f64 (*.f64 N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 N N))) (exp.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (exp.f64 N) N) (+.f64 1 (expm1.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 N N))) (+.f64 1 (expm1.f64 N))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 N N N) 3))))) (#(struct:change #<rule egg-rr> (2) ((x hypot.f64 N (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x hypot.f64 (*.f64 N N) N)))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (*.f64 (log1p.f64 (fma.f64 N N N)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (fma.f64 N N N)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 N N N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 N 1 (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 N -1 (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 N 4) (/.f64 1 (fma.f64 N N N)) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N N) 1 N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 N (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 N N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 (fma.f64 N N N) 1) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N N)) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 (fma.f64 N N N) 1) 1 -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (+.f64 (fma.f64 N N N) 1)) (pow.f64 (cbrt.f64 (+.f64 (fma.f64 N N N) 1)) 2) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 (fma.f64 N N N) 1)) 2) (cbrt.f64 (+.f64 (fma.f64 N N N) 1)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 2) (cbrt.f64 N) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 2) (pow.f64 (cbrt.f64 N) 4) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 2) (neg.f64 (cbrt.f64 N)) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 2) (*.f64 (cbrt.f64 N) N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 N) (pow.f64 (cbrt.f64 N) 2) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 4) (pow.f64 (cbrt.f64 N) 2) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 4) (neg.f64 (pow.f64 (cbrt.f64 N) 2)) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 1 (hypot.f64 N (sqrt.f64 N))) (hypot.f64 1 (hypot.f64 N (sqrt.f64 N))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 N) (sqrt.f64 N) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 N) (neg.f64 (sqrt.f64 N)) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 N) (*.f64 (sqrt.f64 N) N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 1 (pow.f64 (fma.f64 N N N) 3)) (/.f64 1 (fma.f64 (fma.f64 N N N) (-.f64 (fma.f64 N N N) 1) 1)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 -1 N (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 -1 (*.f64 N N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 1 (pow.f64 (fma.f64 N N N) 2)) (/.f64 1 (+.f64 (fma.f64 N N N) 1)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N (sqrt.f64 N)) (sqrt.f64 N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N N))) 2) (cbrt.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N N))) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (pow.f64 (cbrt.f64 N) 8)) (sqrt.f64 (pow.f64 (cbrt.f64 N) 4)) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N N))) (sqrt.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N N))) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (pow.f64 (cbrt.f64 N) 4)) (sqrt.f64 (pow.f64 (cbrt.f64 N) 2)) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 4)) (pow.f64 (cbrt.f64 N) 2) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (cbrt.f64 N) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) -2) (/.f64 (pow.f64 N 4) (cbrt.f64 (fma.f64 N N N))) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) -1/2) (/.f64 (pow.f64 N 4) (hypot.f64 N (sqrt.f64 N))) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (*.f64 N N) 1) (/.f64 N (/.f64 (fma.f64 N N N) N)) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (pow.f64 (cbrt.f64 N) 8) 1) (/.f64 (pow.f64 (cbrt.f64 N) 4) (fma.f64 N N N)) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (*.f64 N N) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))) (/.f64 (*.f64 N N) (cbrt.f64 (fma.f64 N N N))) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (pow.f64 (cbrt.f64 N) 8) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))) (/.f64 (pow.f64 (cbrt.f64 N) 4) (cbrt.f64 (fma.f64 N N N))) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (*.f64 N N) (hypot.f64 N (sqrt.f64 N))) (/.f64 (*.f64 N N) (hypot.f64 N (sqrt.f64 N))) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (/.f64 (pow.f64 (cbrt.f64 N) 8) (hypot.f64 N (sqrt.f64 N))) (/.f64 (pow.f64 (cbrt.f64 N) 4) (hypot.f64 N (sqrt.f64 N))) (neg.f64 (/.f64 N (/.f64 (fma.f64 N N N) N))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (neg.f64 (sqrt.f64 N)) (sqrt.f64 N) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N (pow.f64 (cbrt.f64 N) 2)) (cbrt.f64 N) N)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 -1 (pow.f64 (cbrt.f64 N) 2)) (cbrt.f64 N) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 -1 (sqrt.f64 N)) (sqrt.f64 N) (*.f64 N N))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (pow.f64 N 4) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 N N) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (pow.f64 (fma.f64 N N N) 2) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (pow.f64 (fma.f64 N N N) 2) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (pow.f64 (fma.f64 N N N) 2))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (fma.f64 N N N) (*.f64 N N)) (*.f64 (fma.f64 N N N) N))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 N N) (fma.f64 N N N)) (*.f64 N (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (pow.f64 (fma.f64 N N N) 2))) 2)) (log.f64 (cbrt.f64 (exp.f64 (pow.f64 (fma.f64 N N N) 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (pow.f64 (fma.f64 N N N) 2)))) (log.f64 (sqrt.f64 (exp.f64 (pow.f64 (fma.f64 N N N) 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 N N) (fma.f64 N N -1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 N N) (fma.f64 N N 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (fma.f64 N N N) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (fma.f64 N N N) 2) (*.f64 (/.f64 1 (fma.f64 N N N)) (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 N N N) (fma.f64 N N N))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (pow.f64 (fma.f64 N N N) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (*.f64 (cbrt.f64 (fma.f64 N N N)) (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (neg.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (hypot.f64 N (sqrt.f64 N)) (*.f64 (hypot.f64 N (sqrt.f64 N)) (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 N 12) (pow.f64 N 6)) (/.f64 1 (+.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 N 6))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (fma.f64 N N N) 3) (/.f64 1 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 -1 (pow.f64 (fma.f64 N N N) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 (/.f64 1 (fma.f64 N N N)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 (fma.f64 N N N) -2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (fma.f64 N N N) 3/2) (hypot.f64 N (sqrt.f64 N)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (neg.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4)) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 N N 1) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (fma.f64 N N N) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))) (cbrt.f64 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (pow.f64 (fma.f64 N N N) 2) (*.f64 (/.f64 1 (fma.f64 N N N)) (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (pow.f64 (fma.f64 N N N) 2) (*.f64 (fma.f64 N N N) (/.f64 1 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 N N N) (/.f64 1 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (pow.f64 (/.f64 1 (fma.f64 N N N)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 N 6)) (-.f64 (pow.f64 N 12) (pow.f64 N 6))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (pow.f64 (fma.f64 N N N) -2))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 N 12) (pow.f64 N 6)) (+.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 N 6)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (pow.f64 (fma.f64 N N N) 3) (fma.f64 N N N))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 (fma.f64 N N N) 2))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 N 12) (pow.f64 N 6))) (+.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 N 6)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 N 12) (pow.f64 N 6))) (neg.f64 (+.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 N 6))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (pow.f64 (fma.f64 N N N) 4)) (pow.f64 (fma.f64 N N N) 2))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 N 12) (pow.f64 N 6)) (+.f64 (pow.f64 N 8) (-.f64 (pow.f64 N 4) (pow.f64 N 6))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 N N N) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) 6) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 N N N)) 6)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (hypot.f64 N (sqrt.f64 N)) 4)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) 3) 2/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 1 (fma.f64 N N N)) -2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) 4) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (/.f64 1 (fma.f64 N N N)) 2) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (+.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 N 6)) (-.f64 (pow.f64 N 12) (pow.f64 N 6))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 N N N) -2) -1)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (pow.f64 (fma.f64 N N N) 2))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 N N N) 4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (fma.f64 N N N) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (pow.f64 (fma.f64 N N N) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 1 (+.f64 1 (expm1.f64 (pow.f64 (fma.f64 N N N) 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 (+.f64 1 (expm1.f64 (pow.f64 N 4))) (pow.f64 (exp.f64 N) N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 (exp.f64 (pow.f64 N 4)) (+.f64 1 (expm1.f64 (*.f64 N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (/.f64 (+.f64 1 (expm1.f64 (pow.f64 N 4))) (+.f64 1 (expm1.f64 (*.f64 N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (pow.f64 N 4))) (pow.f64 (exp.f64 N) N)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (pow.f64 N 4)) (+.f64 1 (expm1.f64 (*.f64 N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (pow.f64 N 4))) (+.f64 1 (expm1.f64 (*.f64 N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 N N))) (exp.f64 (pow.f64 N 4))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (exp.f64 N) N) (+.f64 1 (expm1.f64 (pow.f64 N 4)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 N N))) (+.f64 1 (expm1.f64 (pow.f64 N 4)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 N N N) 6))))) (#(struct:change #<rule egg-rr> (2) ((x hypot.f64 (pow.f64 N 4) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (fma.f64 N N N) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (pow.f64 (fma.f64 N N N) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (pow.f64 (fma.f64 N N N) 2)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (fma.f64 N N N) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 N N (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 N (pow.f64 N 3) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 N 4) 1 (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N N) (*.f64 N N) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N N) (fma.f64 N N N) (*.f64 N (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N N) 1 (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N N) (fma.f64 N N -1) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N N) (fma.f64 N N -1) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N N) (fma.f64 N N 1) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N N) (fma.f64 N N 1) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 2) 1 (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 2) 1 (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 2) (*.f64 (/.f64 1 (fma.f64 N N N)) (fma.f64 N N N)) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 2) (*.f64 (/.f64 1 (fma.f64 N N N)) (fma.f64 N N N)) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 N N N) (*.f64 N N) (*.f64 (fma.f64 N N N) N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 N N N) (fma.f64 N N N) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 N N N) (fma.f64 N N N) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (pow.f64 N 4) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 N N) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (pow.f64 (fma.f64 N N N) 2) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (pow.f64 (fma.f64 N N N) 2) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 1 (pow.f64 (fma.f64 N N N) 2)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 N 3) N (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 2) (pow.f64 (cbrt.f64 N) 4) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 2) (*.f64 (cbrt.f64 N) N) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (*.f64 (cbrt.f64 (fma.f64 N N N)) (fma.f64 N N N)) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (*.f64 (cbrt.f64 (fma.f64 N N N)) (fma.f64 N N N)) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (neg.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4) (neg.f64 (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 4) (pow.f64 (cbrt.f64 N) 2) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 4) (pow.f64 (cbrt.f64 N) 8) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 4) (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 4) (*.f64 (pow.f64 (cbrt.f64 N) 2) (*.f64 N N)) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 N) 8) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 N (sqrt.f64 N)) (*.f64 (hypot.f64 N (sqrt.f64 N)) (fma.f64 N N N)) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 N (sqrt.f64 N)) (*.f64 (hypot.f64 N (sqrt.f64 N)) (fma.f64 N N N)) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 N) (*.f64 (sqrt.f64 N) N) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 (pow.f64 N 12) (pow.f64 N 6)) (/.f64 1 (+.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 N 6))) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 (pow.f64 N 12) (pow.f64 N 6)) (/.f64 1 (+.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 N 6))) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 3) (/.f64 1 (fma.f64 N N N)) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 3) (/.f64 1 (fma.f64 N N N)) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 -1 (*.f64 N N) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 -1 (pow.f64 (fma.f64 N N N) 2) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 -1 (pow.f64 (fma.f64 N N N) 2) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 (/.f64 1 (fma.f64 N N N)) 2) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 (/.f64 1 (fma.f64 N N N)) 2) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 (fma.f64 N N N) -2) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 4) (pow.f64 (fma.f64 N N N) -2) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N (sqrt.f64 N)) (sqrt.f64 N) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 3/2) (hypot.f64 N (sqrt.f64 N)) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (fma.f64 N N N) 3/2) (hypot.f64 N (sqrt.f64 N)) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 1 (pow.f64 (fma.f64 N N N) 2))) 2) (cbrt.f64 (+.f64 1 (pow.f64 (fma.f64 N N N) 2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (pow.f64 (cbrt.f64 N) 8)) (sqrt.f64 (pow.f64 (cbrt.f64 N) 4)) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 1 (fma.f64 N N N)) (hypot.f64 1 (fma.f64 N N N)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 4)) (pow.f64 (cbrt.f64 N) 2) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (neg.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4)) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (neg.f64 (pow.f64 (cbrt.f64 (fma.f64 N N N)) 4)) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2)) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 N N 1) (*.f64 N N) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 N N 1) (*.f64 N N) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 N (pow.f64 (cbrt.f64 N) 2)) (cbrt.f64 N) (pow.f64 N 4))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (fma.f64 N N N) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))) (cbrt.f64 (fma.f64 N N N)) (fma.f64 N N (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (fma.f64 N N N) (cbrt.f64 (pow.f64 (fma.f64 N N N) 2))) (cbrt.f64 (fma.f64 N N N)) (fma.f64 (neg.f64 (pow.f64 (cbrt.f64 N) 2)) (pow.f64 (cbrt.f64 N) 4) (*.f64 N N)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 N N) (pow.f64 (cbrt.f64 N) 4)) (pow.f64 (cbrt.f64 N) 2) (*.f64 N N))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))) 2)) (log.f64 (cbrt.f64 (exp.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))))) (log.f64 (sqrt.f64 (exp.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))) (cbrt.f64 (pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 2)) (cbrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))) (sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1))))))))

simplify54.0ms (0.9%)

Algorithm
egg-herbie
Rules
824×associate-/r*_binary64
749×fma-def_binary64
681×associate-*l*_binary64
377×associate-*l/_binary64
256×associate-/r/_binary64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
025593
157566
2101566
3280434
41636374
Stop Event
node limit
Counts
308 → 284
Calls
Call 1
Inputs
N
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(pow.f64 N 2)
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(pow.f64 N 2)
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(+.f64 N (pow.f64 N 2))
(*.f64 -1 (pow.f64 N 2))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(pow.f64 N 4)
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(pow.f64 N 4)
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (-.f64 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (*.f64 -1 N)))) (/.f64 (pow.f64 N 2) (fma.f64 N N (*.f64 -1 N)))))
(atan2.f64 1 (-.f64 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (*.f64 -1 N)))) (/.f64 (pow.f64 N 2) (fma.f64 N N (*.f64 -1 N)))))
(atan2.f64 1 (-.f64 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (*.f64 -1 N)))) (/.f64 (pow.f64 N 2) (fma.f64 N N (*.f64 -1 N)))))
(atan2.f64 1 (-.f64 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (*.f64 -1 N)))) (/.f64 (pow.f64 N 2) (fma.f64 N N (*.f64 -1 N)))))
Outputs
N
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(pow.f64 N 2)
(*.f64 N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(pow.f64 N 2)
(*.f64 N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(+.f64 N (pow.f64 N 2))
(+.f64 N (*.f64 N N))
(fma.f64 N N N)
(*.f64 -1 (pow.f64 N 2))
(neg.f64 (*.f64 N N))
(*.f64 N (neg.f64 N))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(fma.f64 -1 (*.f64 N N) (pow.f64 N 4))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(fma.f64 -1 (*.f64 N N) (pow.f64 N 4))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(fma.f64 -1 (*.f64 N N) (pow.f64 N 4))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(pow.f64 N 4)
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(fma.f64 -1 (*.f64 N N) (pow.f64 N 4))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(fma.f64 -1 (*.f64 N N) (pow.f64 N 4))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(fma.f64 -1 (*.f64 N N) (pow.f64 N 4))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(pow.f64 N 4)
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(fma.f64 -1 (*.f64 N N) (pow.f64 N 4))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(fma.f64 -1 (*.f64 N N) (pow.f64 N 4))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(+.f64 (*.f64 -1 (pow.f64 N 2)) (pow.f64 N 4))
(fma.f64 -1 (*.f64 N N) (pow.f64 N 4))
(-.f64 (pow.f64 N 4) (*.f64 N N))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) 1) (/.f64 (pow.f64 N 2) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (*.f64 -1 N)))) (/.f64 (pow.f64 N 2) (fma.f64 N N (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (*.f64 -1 N)))) (/.f64 (pow.f64 N 2) (fma.f64 N N (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (*.f64 -1 N)))) (/.f64 (pow.f64 N 2) (fma.f64 N N (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))
(atan2.f64 1 (-.f64 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (*.f64 -1 N)))) (/.f64 (pow.f64 N 2) (fma.f64 N N (*.f64 -1 N)))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 (*.f64 N N) (fma.f64 N N (neg.f64 N))))))
(atan2.f64 1 (+.f64 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N))) (-.f64 1 (/.f64 N (/.f64 (fma.f64 N N (neg.f64 N)) N)))))
(atan2.f64 1 (-.f64 (/.f64 (pow.f64 N 4) (-.f64 (*.f64 N N) N)) (-.f64 (/.f64 (*.f64 N N) (-.f64 (*.f64 N N) N)) 1)))
(atan2.f64 1 (+.f64 1 (*.f64 (*.f64 N (/.f64 1 (+.f64 N -1))) (fma.f64 N N -1))))
(atan2.f64 1 (fma.f64 (/.f64 N (+.f64 N -1)) (fma.f64 N N -1) 1))

localize18.0ms (0.3%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.2b
(pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 3)
0.5b
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
14.7b
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
Compiler

Compiled 42 to 22 computations (47.6% saved)

series10.0ms (0.2%)

Counts
2 → 24
Calls

6 calls:

TimeVariablePointExpression
3.0ms
N
@-inf
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
2.0ms
N
@0
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
2.0ms
N
@inf
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
1.0ms
N
@inf
(pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 3)
1.0ms
N
@-inf
(pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 3)

rewrite67.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
761×pow1_binary64
714×add-log-exp_binary64
713×log1p-expm1-u_binary64
713×expm1-log1p-u_binary64
698×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0924
118824
2197624
Stop Event
node limit
Counts
2 → 39
Calls
Call 1
Inputs
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 3)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (pow.f64 (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (pow.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) 2) (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/6) (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) 1/3) (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1/3) (pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/6) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) 2) (*.f64 (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/6) (*.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/6) (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) 2) 3) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/6) 3) (pow.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/6) 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) 1) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) (pow.f64 (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) 2)) (cbrt.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2) (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/6)) (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))))))))

simplify193.0ms (3.4%)

Algorithm
egg-herbie
Rules
1290×sqr-pow_binary64
666×pow-sqr_binary64
625×cube-prod_binary64
558×fabs-mul_binary64
373×unpow3_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
011324
127288
241288
361288
493288
5190288
6586288
71263288
81360288
91499288
101662288
111901288
122228288
132656288
143163288
153770288
164497288
174818288
185102288
195324288
205502288
215584288
226527288
237504288
247970288
Stop Event
node limit
Counts
63 → 43
Calls
Call 1
Inputs
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 (pow.f64 1 1/3) (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(*.f64 (pow.f64 1 1/3) (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(*.f64 (pow.f64 1 1/3) (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(*.f64 (pow.f64 1 1/3) (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
Outputs
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(pow.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) 1/3)
(cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (pow.f64 1 1/3) (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (pow.f64 1 1/3) (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (pow.f64 1 1/3) (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (pow.f64 1 1/3) (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))
(*.f64 (atan2.f64 1 (+.f64 (fma.f64 N N N) 1)) (pow.f64 1 1/3))
(*.f64 1 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))
(atan2.f64 1 (+.f64 1 (fma.f64 N N N)))

eval228.0ms (4%)

Compiler

Compiled 7551 to 4041 computations (46.5% saved)

prune59.0ms (1%)

Pruning

10 alts after pruning (6 fresh and 4 done)

PrunedKeptTotal
New4086414
Fresh000
Picked101
Done246
Total41110421
Error
0.5b
Counts
421 → 10
Alt Table
Click to see full alt table
StatusErrorProgram
0.5b
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
0.8b
(atan2.f64 1 (+.f64 1 (fma.f64 (pow.f64 (cbrt.f64 N) 2) (*.f64 (cbrt.f64 N) N) N)))
14.9b
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
23.8b
(atan2.f64 1 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N)))))
2.0b
(pow.f64 (sqrt.f64 (atan2.f64 1 (fma.f64 N N 1))) 2)
1.4b
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
1.8b
(*.f64 (*.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (cbrt.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))
29.5b
(atan2.f64 1 (+.f64 1 N))
15.6b
(atan2.f64 1 (+.f64 1 (*.f64 (fma.f64 N N N) (*.f64 (fma.f64 N N N) (/.f64 1 (fma.f64 N N N))))))
2.7b
(pow.f64 (cbrt.f64 (atan2.f64 1 (fma.f64 N N 1))) 3)
Compiler

Compiled 133 to 91 computations (31.6% saved)

regimes20.0ms (0.3%)

Counts
16 → 1
Calls
Call 1
Inputs
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 (+.f64 N (-.f64 1 N)) (+.f64 1 (*.f64 N (+.f64 N 1))))
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
(atan2.f64 1 (+.f64 1 (/.f64 (pow.f64 N 4) (fma.f64 N N (neg.f64 N)))))
(atan2.f64 1 (+.f64 1 (/.f64 (-.f64 (pow.f64 N 4) (*.f64 N N)) (fma.f64 N N (neg.f64 N)))))
(pow.f64 (sqrt.f64 (atan2.f64 1 (fma.f64 N N 1))) 2)
(pow.f64 (cbrt.f64 (atan2.f64 1 (fma.f64 N N 1))) 3)
(pow.f64 (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 3)
(pow.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) 2)
(atan2.f64 1 (+.f64 1 (*.f64 (fma.f64 N N N) (*.f64 (fma.f64 N N N) (/.f64 1 (fma.f64 N N N))))))
(atan2.f64 1 (+.f64 1 (fma.f64 (pow.f64 (cbrt.f64 N) 2) (*.f64 (cbrt.f64 N) N) N)))
(fma.f64 (pow.f64 (cbrt.f64 (atan.f64 (+.f64 N 1))) 2) (cbrt.f64 (atan.f64 (+.f64 N 1))) (neg.f64 (atan.f64 N)))
(+.f64 (-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N)) (fma.f64 (neg.f64 (sqrt.f64 (atan.f64 N))) (sqrt.f64 (atan.f64 N)) (atan.f64 N)))
(*.f64 (*.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N)))) (cbrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))) (cbrt.f64 (sqrt.f64 (atan2.f64 1 (+.f64 1 (fma.f64 N N N))))))
Outputs
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
Calls

2 calls:

10.0ms
N
3.0ms
(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Results
ErrorSegmentsBranch
0.5b1N
0.5b1(-.f64 (atan.f64 (+.f64 N 1)) (atan.f64 N))
Compiler

Compiled 220 to 139 computations (36.8% saved)

regimes4.0ms (0.1%)

Accuracy

Total -28.3b remaining (-1993.3%)

Threshold costs -28.3b (-1993.3%)

Counts
2 → 1
Calls
Call 1
Inputs
(atan2.f64 1 (+.f64 1 N))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
Outputs
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
Calls

1 calls:

3.0ms
N
Results
ErrorSegmentsBranch
1.4b1N
Compiler

Compiled 15 to 11 computations (26.7% saved)

simplify4.0ms (0.1%)

Algorithm
egg-herbie
Rules
+-commutative_binary64
*-commutative_binary64
1-exp_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01230
11830
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (+.f64 1 N))
Outputs
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 N 1))))
(atan2.f64 1 (+.f64 1 (*.f64 N (+.f64 1 N))))
(atan2.f64 1 (+.f64 1 (*.f64 N N)))
(atan2.f64 1 (+.f64 1 N))
Compiler

Compiled 24 to 19 computations (20.8% saved)

soundness0.0ms (0%)

end29.0ms (0.5%)

Compiler

Compiled 22 to 17 computations (22.7% saved)

Profiling

Loading profile data...