Details

Time bar (total: 8.0s)

analyze0.0ms (0%)

Algorithm
search
Search
TrueOtherFalseIter
0%49.6%50.4%0
49.6%0%50.4%1
Compiler

Compiled 12 to 9 computations (25% saved)

sample5.1s (64.1%)

Results
3.7s4403×body2048valid
1.0s2067×body1024valid
253.0ms1035×body512valid
116.0ms751×body256valid

preprocess18.0ms (0.2%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
056
196
2136
3196
4266
5366
6476
7596
8626
011
Stop Event
saturated
saturated
Calls
Call 1
Inputs
0
Outputs
0
Call 2
Inputs
(-.f64 1 (cos.f64 x))
Outputs
(-.f64 1 (cos.f64 x))
Compiler

Compiled 6 to 5 computations (16.7% saved)

simplify8.0ms (0.1%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
056
196
2136
3196
4266
5366
6476
7596
8626
Stop Event
saturated
Counts
1 → 1
Calls
Call 1
Inputs
(-.f64 1 (cos.f64 x))
Outputs
(-.f64 1 (cos.f64 x))

eval0.0ms (0%)

Compiler

Compiled 5 to 4 computations (20% saved)

prune1.0ms (0%)

Pruning

2 alts after pruning (2 fresh and 0 done)

PrunedKeptTotal
New011
Fresh011
Picked000
Done000
Total022
Error
29.6b
Counts
2 → 1
Alt Table
Click to see full alt table
StatusErrorProgram
29.6b
(-.f64 1 (cos.f64 x))
Compiler

Compiled 5 to 4 computations (20% saved)

localize4.0ms (0%)

Local error

Found 1 expressions with local error:

NewErrorProgram
2.9b
(-.f64 1 (cos.f64 x))
Compiler

Compiled 9 to 5 computations (44.4% saved)

series1.0ms (0%)

Counts
1 → 4
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@0
(-.f64 1 (cos.f64 x))
0.0ms
x
@inf
(-.f64 1 (cos.f64 x))
0.0ms
x
@-inf
(-.f64 1 (cos.f64 x))

rewrite49.0ms (0.6%)

Algorithm
batch-egg-rewrite
Rules
517×pow1_binary64
503×add-sqr-sqrt_binary64
481×add-log-exp_binary64
481×log1p-expm1-u_binary64
481×expm1-log1p-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
056
11026
212506
Stop Event
node limit
Counts
1 → 28
Calls
Call 1
Inputs
(-.f64 1 (cos.f64 x))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (neg.f64 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (*.f64 (neg.f64 (cos.f64 x)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (neg.f64 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (-.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 1 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (-.f64 1 (cos.f64 x))) (pow.f64 (cbrt.f64 (-.f64 1 (cos.f64 x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (-.f64 1 (cos.f64 x))) 2) (cbrt.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (-.f64 1 (cos.f64 x))) (sqrt.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 1 (pow.f64 (cos.f64 x) 3)) (/.f64 1 (+.f64 1 (*.f64 (cos.f64 x) (+.f64 1 (cos.f64 x))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (/.f64 1 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 1 (*.f64 (cos.f64 x) (+.f64 1 (cos.f64 x)))) (-.f64 1 (pow.f64 (cos.f64 x) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 1 (cos.f64 x)) (*.f64 (sin.f64 x) (sin.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1 (pow.f64 (cos.f64 x) 3)) (+.f64 1 (*.f64 (cos.f64 x) (+.f64 1 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (+.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 1 (pow.f64 (cos.f64 x) 3))) (neg.f64 (+.f64 1 (*.f64 (cos.f64 x) (+.f64 1 (cos.f64 x))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (*.f64 (sin.f64 x) (sin.f64 x))) (neg.f64 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 1 (pow.f64 (neg.f64 (cos.f64 x)) 3)) (+.f64 1 (-.f64 (*.f64 (neg.f64 (cos.f64 x)) (neg.f64 (cos.f64 x))) (neg.f64 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1 (*.f64 (neg.f64 (cos.f64 x)) (neg.f64 (cos.f64 x)))) (-.f64 1 (neg.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (-.f64 1 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (-.f64 1 (cos.f64 x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (-.f64 1 (cos.f64 x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log1p.f64 (neg.f64 (cos.f64 x))))))))

simplify101.0ms (1.3%)

Algorithm
egg-herbie
Rules
601×distribute-rgt-out_binary64
520×sqr-pow_binary64
482×associate-+l+_binary64
478×distribute-lft-out_binary64
413×unswap-sqr_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
02470
15670
212870
342570
4201270
5441770
6479470
7530070
8629070
9727470
10771370
Stop Event
node limit
Counts
32 → 36
Calls
Call 1
Inputs
(*.f64 1/2 (pow.f64 x 2))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (*.f64 1/720 (pow.f64 x 6))))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (+.f64 (*.f64 1/720 (pow.f64 x 6)) (*.f64 -1/40320 (pow.f64 x 8)))))
Outputs
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(*.f64 x (*.f64 x (fma.f64 (*.f64 x x) -1/24 1/2)))
(*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (*.f64 1/720 (pow.f64 x 6))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/720 (pow.f64 x 6))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 1/720 (pow.f64 x 6) (*.f64 -1/24 (pow.f64 x 4))))
(fma.f64 (*.f64 x x) (fma.f64 (*.f64 x x) -1/24 1/2) (*.f64 1/720 (pow.f64 x 6)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (+.f64 (*.f64 1/720 (pow.f64 x 6)) (*.f64 -1/40320 (pow.f64 x 8)))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 -1/24 (pow.f64 x 4) (fma.f64 1/720 (pow.f64 x 6) (*.f64 -1/40320 (pow.f64 x 8)))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 1/720 (pow.f64 x 6) (fma.f64 -1/40320 (pow.f64 x 8) (*.f64 -1/24 (pow.f64 x 4)))))
(fma.f64 (pow.f64 x 4) (fma.f64 (pow.f64 x 4) -1/40320 -1/24) (fma.f64 1/720 (pow.f64 x 6) (*.f64 1/2 (*.f64 x x))))

eval8.0ms (0.1%)

Compiler

Compiled 390 to 244 computations (37.4% saved)

prune11.0ms (0.1%)

Pruning

7 alts after pruning (6 fresh and 1 done)

PrunedKeptTotal
New30636
Fresh000
Picked011
Done000
Total30737
Error
0.0b
Counts
37 → 7
Alt Table
Click to see full alt table
StatusErrorProgram
29.6b
(-.f64 1 (cos.f64 x))
0.0b
(*.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (/.f64 1 (+.f64 1 (cos.f64 x))))
29.7b
(log.f64 (exp.f64 (-.f64 1 (cos.f64 x))))
0.1b
(*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))
0.1b
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
0.3b
(*.f64 1/2 (*.f64 x x))
0.0b
(/.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (+.f64 1 (cos.f64 x)))
Compiler

Compiled 125 to 90 computations (28% saved)

localize42.0ms (0.5%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.0b
(/.f64 1 (+.f64 1 (cos.f64 x)))
0.0b
(+.f64 1 (cos.f64 x))
0.0b
(*.f64 (sin.f64 x) (sin.f64 x))
0.0b
(*.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (/.f64 1 (+.f64 1 (cos.f64 x))))
Compiler

Compiled 34 to 16 computations (52.9% saved)

series6.0ms (0.1%)

Counts
4 → 40
Calls

12 calls:

TimeVariablePointExpression
1.0ms
x
@inf
(*.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (/.f64 1 (+.f64 1 (cos.f64 x))))
1.0ms
x
@-inf
(*.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (/.f64 1 (+.f64 1 (cos.f64 x))))
1.0ms
x
@0
(*.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (/.f64 1 (+.f64 1 (cos.f64 x))))
1.0ms
x
@-inf
(/.f64 1 (+.f64 1 (cos.f64 x)))
1.0ms
x
@inf
(/.f64 1 (+.f64 1 (cos.f64 x)))

rewrite87.0ms (1.1%)

Algorithm
batch-egg-rewrite
Rules
454×log-prod_binary64
368×prod-diff_binary64
340×exp-prod_binary64
287×pow-prod-down_binary64
241×pow2_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0935
120227
2281727
Stop Event
node limit
Counts
4 → 192
Calls
Call 1
Inputs
(*.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (/.f64 1 (+.f64 1 (cos.f64 x))))
(*.f64 (sin.f64 x) (sin.f64 x))
(+.f64 1 (cos.f64 x))
(/.f64 1 (+.f64 1 (cos.f64 x)))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (neg.f64 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (*.f64 -1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (*.f64 (neg.f64 (cbrt.f64 (pow.f64 (cos.f64 x) 2))) (cbrt.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (*.f64 (neg.f64 (sqrt.f64 (cos.f64 x))) (sqrt.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (-.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (-.f64 1 (cos.f64 x)))) 2)) (log.f64 (cbrt.f64 (exp.f64 (-.f64 1 (cos.f64 x))))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (-.f64 1 (cos.f64 x))))) (log.f64 (sqrt.f64 (exp.f64 (-.f64 1 (cos.f64 x))))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 1 (cos.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (-.f64 1 (cos.f64 x)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 1/2 (+.f64 1 (cos.f64 x))) (/.f64 (*.f64 (cos.f64 (+.f64 x x)) 1/2) (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (sin.f64 x) (/.f64 (+.f64 1 (cos.f64 x)) (sin.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 1 (cos.f64 x)) (pow.f64 (sin.f64 x) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (pow.f64 (cbrt.f64 (sin.f64 x)) 4) (/.f64 (+.f64 1 (cos.f64 x)) (pow.f64 (cbrt.f64 (sin.f64 x)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1 (cos.f64 (+.f64 x x))) (*.f64 (+.f64 1 (cos.f64 x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (pow.f64 (sin.f64 x) 2)) (+.f64 -1 (neg.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 1 (cos.f64 (+.f64 x x))) 1) (*.f64 2 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 1 (cos.f64 (+.f64 x x))) -1) (*.f64 2 (+.f64 -1 (neg.f64 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 -1 (-.f64 1 (cos.f64 (+.f64 x x)))) (*.f64 (+.f64 -1 (neg.f64 (cos.f64 x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (/.f64 (pow.f64 (sin.f64 x) 2) (sqrt.f64 (+.f64 1 (cos.f64 x)))) (sqrt.f64 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (/.f64 (pow.f64 (sin.f64 x) 2) 1) (+.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (/.f64 (pow.f64 (sin.f64 x) 2) (pow.f64 (cbrt.f64 (+.f64 1 (cos.f64 x))) 2)) (cbrt.f64 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1 (pow.f64 (cos.f64 x) 3)) (+.f64 1 (fma.f64 (cos.f64 x) (cos.f64 x) (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 1 (cos.f64 (+.f64 x x))) (/.f64 1 (+.f64 1 (cos.f64 x)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 -1 (pow.f64 (sin.f64 x) 2)) (+.f64 -1 (neg.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (pow.f64 (sin.f64 x) 2) -1) (+.f64 -1 (neg.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (/.f64 1 (+.f64 1 (cos.f64 x))) (-.f64 1 (cos.f64 (+.f64 x x)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (-.f64 1 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (E.f64) (log1p.f64 (neg.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (-.f64 1 (cos.f64 x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (-.f64 1 (cos.f64 x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (pow.f64 (sin.f64 x) 6) (pow.f64 (+.f64 1 (cos.f64 x)) 3)) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (+.f64 1 (cos.f64 x)) (pow.f64 (sin.f64 x) 2)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (log1p.f64 (neg.f64 (cos.f64 x)))) 2)) (cbrt.f64 (log1p.f64 (neg.f64 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (log1p.f64 (neg.f64 (cos.f64 x))))) (sqrt.f64 (log1p.f64 (neg.f64 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (-.f64 1 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (/.f64 (pow.f64 (sin.f64 x) 6) (pow.f64 (+.f64 1 (cos.f64 x)) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log1p.f64 (neg.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log1p.f64 (neg.f64 (cos.f64 x))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log1p.f64 (neg.f64 (cos.f64 x)))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 1/3 (log1p.f64 (neg.f64 (cos.f64 x)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 1/2 (log1p.f64 (neg.f64 (cos.f64 x)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log1p.f64 (neg.f64 (cos.f64 x))) 1) 1))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (neg.f64 (pow.f64 (cos.f64 x) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (*.f64 (neg.f64 (cos.f64 x)) (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (pow.f64 (sin.f64 x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 1/2 (neg.f64 (*.f64 (cos.f64 (+.f64 x x)) 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 1/2 (*.f64 -1/2 (cos.f64 (+.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (pow.f64 (sin.f64 x) 2))) 2)) (log.f64 (cbrt.f64 (exp.f64 (pow.f64 (sin.f64 x) 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (pow.f64 (sin.f64 x) 2)))) (log.f64 (sqrt.f64 (exp.f64 (pow.f64 (sin.f64 x) 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 1 (pow.f64 (cos.f64 x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 1/2 (*.f64 (cos.f64 (+.f64 x x)) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 1/2 (/.f64 (cos.f64 (+.f64 x x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (pow.f64 (sin.f64 x) 2))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 2 (-.f64 1 (cos.f64 (+.f64 x x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1 (cos.f64 (+.f64 x x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 1 (cos.f64 (+.f64 x x)))) -2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 1 (cos.f64 (+.f64 x x))) 1) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1/8 (pow.f64 (*.f64 (cos.f64 (+.f64 x x)) 1/2) 3)) (+.f64 1/4 (+.f64 (pow.f64 (*.f64 (cos.f64 (+.f64 x x)) 1/2) 2) (*.f64 1/2 (*.f64 (cos.f64 (+.f64 x x)) 1/2)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1 (pow.f64 (cos.f64 x) 4)) (+.f64 1 (pow.f64 (cos.f64 x) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1/4 (pow.f64 (*.f64 (cos.f64 (+.f64 x x)) 1/2) 2)) (pow.f64 (cos.f64 x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1 (pow.f64 (cos.f64 x) 6)) (+.f64 1 (+.f64 (pow.f64 (cos.f64 x) 4) (pow.f64 (cos.f64 x) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sin.f64 x) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (sin.f64 x) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (E.f64) (*.f64 2 (log.f64 (sin.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (sin.f64 x) 3) 2/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (sin.f64 x) 4) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (sin.f64 x) 6) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (sin.f64 x)) 6)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cbrt.f64 (sin.f64 x)) 2) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (sin.f64 x)) 4)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 2) (log.f64 (sin.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 2 (-.f64 1 (cos.f64 (+.f64 x x)))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (*.f64 2 (log.f64 (sin.f64 x)))) 2)) (cbrt.f64 (*.f64 2 (log.f64 (sin.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (*.f64 2 (log.f64 (sin.f64 x))))) (sqrt.f64 (*.f64 2 (log.f64 (sin.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (sin.f64 x) 4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (sin.f64 x) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (pow.f64 (sin.f64 x) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (sin.f64 x) 6))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (sin.f64 x) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (sin.f64 x) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 2 (log.f64 (sin.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sin.f64 x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 2 (log.f64 (sin.f64 x))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (pow.f64 (sin.f64 x) 6)) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 2 (log.f64 (cbrt.f64 (sin.f64 x)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (sin.f64 x)) 1) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (sin.f64 x)) 2) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (*.f64 2 (log.f64 (sin.f64 x))) 1) 1))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (+.f64 1 (cos.f64 x)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 1 (-.f64 1 (cos.f64 x))) (/.f64 (pow.f64 (cos.f64 x) 2) (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sin.f64 x) 2) (/.f64 1 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 1 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (+.f64 1 (cos.f64 x))) (pow.f64 (cbrt.f64 (+.f64 1 (cos.f64 x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (+.f64 1 (cos.f64 x))) 2) (cbrt.f64 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 1 (cos.f64 x))) (sqrt.f64 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 1 (pow.f64 (cos.f64 x) 3)) (/.f64 1 (fma.f64 (cos.f64 x) (-.f64 (cos.f64 x) 1) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (pow.f64 (sin.f64 x) 2) (-.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 1 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (cos.f64 x) (-.f64 (cos.f64 x) 1) 1) (+.f64 1 (pow.f64 (cos.f64 x) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 1 (cos.f64 x)) (pow.f64 (sin.f64 x) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 1 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (pow.f64 (cbrt.f64 (+.f64 1 (cos.f64 x))) 2) (/.f64 1 (cbrt.f64 (+.f64 1 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (sqrt.f64 (+.f64 1 (cos.f64 x))) (pow.f64 (+.f64 1 (cos.f64 x)) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 -1 (neg.f64 (cos.f64 x))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 1 (pow.f64 (cos.f64 x) 3)) (fma.f64 (cos.f64 x) (-.f64 (cos.f64 x) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 1 (pow.f64 (cos.f64 x) 3)) (+.f64 (pow.f64 (cos.f64 x) 2) (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (pow.f64 (sin.f64 x) 2)) (neg.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (pow.f64 (sin.f64 x) 2)) (-.f64 (cos.f64 x) 1))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 1 (pow.f64 (cos.f64 x) 3))) (neg.f64 (fma.f64 (cos.f64 x) (-.f64 (cos.f64 x) 1) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 1 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 1 (+.f64 1 (cos.f64 x))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (E.f64) (log1p.f64 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -3) -1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 1 (cos.f64 x)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 1 (cos.f64 x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 1 (cbrt.f64 (+.f64 1 (cos.f64 x)))) -3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 1 (cos.f64 x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -1/2) -2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 1 (cos.f64 x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (cos.f64 x) (-.f64 (cos.f64 x) 1) 1) (+.f64 1 (pow.f64 (cos.f64 x) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (-.f64 1 (cos.f64 x)) (pow.f64 (sin.f64 x) 2)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (log1p.f64 (cos.f64 x))) 2)) (cbrt.f64 (log1p.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (log1p.f64 (cos.f64 x)))) (sqrt.f64 (log1p.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 1 (cos.f64 x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (+.f64 1 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 1 (cos.f64 x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log1p.f64 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log1p.f64 (cos.f64 x)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log1p.f64 (cos.f64 x))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 1/3 (log1p.f64 (cos.f64 x))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 1/2 (log1p.f64 (cos.f64 x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log1p.f64 (cos.f64 x)) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (cos.f64 x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cos.f64 x) 1 1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (cos.f64 x)) (cbrt.f64 (pow.f64 (cos.f64 x) 2)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 (cos.f64 x) 2)) (cbrt.f64 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (cos.f64 x)) (sqrt.f64 (cos.f64 x)) 1)))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (/.f64 1 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (/.f64 1 (+.f64 1 (cos.f64 x))))) 2)) (log.f64 (cbrt.f64 (exp.f64 (/.f64 1 (+.f64 1 (cos.f64 x)))))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (/.f64 1 (+.f64 1 (cos.f64 x)))))) (log.f64 (sqrt.f64 (exp.f64 (/.f64 1 (+.f64 1 (cos.f64 x)))))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (/.f64 1 (+.f64 1 (cos.f64 x))))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (/.f64 1 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (+.f64 1 (cos.f64 x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (cbrt.f64 (+.f64 1 (cos.f64 x)))) (cbrt.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -2)) (/.f64 1 (cbrt.f64 (+.f64 1 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -1/2) (pow.f64 (+.f64 1 (cos.f64 x)) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 -1 (/.f64 1 (+.f64 -1 (neg.f64 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (+.f64 1 (cos.f64 x))) -2) (/.f64 1 (cbrt.f64 (+.f64 1 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (+.f64 1 (pow.f64 (cos.f64 x) 3))) (fma.f64 (cos.f64 x) (-.f64 (cos.f64 x) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sin.f64 x) -2) (-.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 1 (cos.f64 x)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 1 (+.f64 1 (cos.f64 x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (E.f64) (neg.f64 (log1p.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 1 (cos.f64 x)) 2) -1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 1 (cos.f64 x)) 3) -1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 1 (cbrt.f64 (+.f64 1 (cos.f64 x)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 1 (cos.f64 x))) -3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -1/2) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 1 (cos.f64 x))) -2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 -1) (log1p.f64 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (neg.f64 (+.f64 -1 (neg.f64 (cos.f64 x)))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (neg.f64 (log1p.f64 (cos.f64 x)))) 2)) (cbrt.f64 (neg.f64 (log1p.f64 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (neg.f64 (log1p.f64 (cos.f64 x))))) (sqrt.f64 (neg.f64 (log1p.f64 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (/.f64 1 (+.f64 1 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (/.f64 1 (+.f64 1 (cos.f64 x))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 1 (cos.f64 x)) -3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (/.f64 1 (+.f64 1 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (/.f64 1 (+.f64 1 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (neg.f64 (log1p.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log1p.f64 (cos.f64 x)) -1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (neg.f64 (log1p.f64 (cos.f64 x))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (neg.f64 (log1p.f64 (cos.f64 x)))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 1/3 (neg.f64 (log1p.f64 (cos.f64 x)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 -1/2 (log1p.f64 (cos.f64 x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log1p.f64 (cos.f64 x)) 1) -1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log1p.f64 (cos.f64 x)) -1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (neg.f64 (log1p.f64 (cos.f64 x))) 1) 1))))))

simplify107.0ms (1.3%)

Algorithm
egg-herbie
Rules
890×distribute-lft-out_binary64
720×associate-/l/_binary64
671×associate-*l/_binary64
406×associate-+l+_binary64
362×associate-/r/_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
068450
1155446
2367442
31167418
41930418
53506418
64448418
76190418
87466418
97948418
Stop Event
node limit
Counts
232 → 228
Calls
Call 1
Inputs
(*.f64 1/2 (pow.f64 x 2))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (*.f64 1/720 (pow.f64 x 6))))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (+.f64 (*.f64 1/720 (pow.f64 x 6)) (*.f64 -1/40320 (pow.f64 x 8)))))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 (cos.f64 x) 1))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 (cos.f64 x) 1))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 (cos.f64 x) 1))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 (cos.f64 x) 1))
(pow.f64 x 2)
(+.f64 (*.f64 -1/3 (pow.f64 x 4)) (pow.f64 x 2))
(+.f64 (*.f64 -1/3 (pow.f64 x 4)) (+.f64 (*.f64 2/45 (pow.f64 x 6)) (pow.f64 x 2)))
(+.f64 (*.f64 -1/3 (pow.f64 x 4)) (+.f64 (*.f64 -1/315 (pow.f64 x 8)) (+.f64 (*.f64 2/45 (pow.f64 x 6)) (pow.f64 x 2))))
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
2
(+.f64 2 (*.f64 -1/2 (pow.f64 x 2)))
(+.f64 2 (+.f64 (*.f64 -1/2 (pow.f64 x 2)) (*.f64 1/24 (pow.f64 x 4))))
(+.f64 2 (+.f64 (*.f64 -1/2 (pow.f64 x 2)) (+.f64 (*.f64 1/24 (pow.f64 x 4)) (*.f64 -1/720 (pow.f64 x 6)))))
(+.f64 (cos.f64 x) 1)
(+.f64 (cos.f64 x) 1)
(+.f64 (cos.f64 x) 1)
(+.f64 (cos.f64 x) 1)
1/2
(+.f64 (*.f64 1/8 (pow.f64 x 2)) 1/2)
(+.f64 (*.f64 1/8 (pow.f64 x 2)) (+.f64 1/2 (*.f64 1/48 (pow.f64 x 4))))
(+.f64 (*.f64 1/8 (pow.f64 x 2)) (+.f64 1/2 (+.f64 (*.f64 17/5760 (pow.f64 x 6)) (*.f64 1/48 (pow.f64 x 4)))))
(/.f64 1 (+.f64 (cos.f64 x) 1))
(/.f64 1 (+.f64 (cos.f64 x) 1))
(/.f64 1 (+.f64 (cos.f64 x) 1))
(/.f64 1 (+.f64 (cos.f64 x) 1))
Outputs
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (*.f64 1/720 (pow.f64 x 6))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/720 (pow.f64 x 6))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 1/720 (pow.f64 x 6) (*.f64 -1/24 (pow.f64 x 4))))
(fma.f64 -1/24 (pow.f64 x 4) (fma.f64 1/720 (pow.f64 x 6) (*.f64 1/2 (*.f64 x x))))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (+.f64 (*.f64 1/720 (pow.f64 x 6)) (*.f64 -1/40320 (pow.f64 x 8)))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 -1/24 (pow.f64 x 4) (fma.f64 1/720 (pow.f64 x 6) (*.f64 -1/40320 (pow.f64 x 8)))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 1/720 (pow.f64 x 6) (fma.f64 -1/24 (pow.f64 x 4) (*.f64 -1/40320 (pow.f64 x 8)))))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 (cos.f64 x) 1))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 (cos.f64 x) 1))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 (cos.f64 x) 1))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 (cos.f64 x) 1))
(/.f64 (pow.f64 (sin.f64 x) 2) (+.f64 1 (cos.f64 x)))
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (*.f64 -1/3 (pow.f64 x 4)) (pow.f64 x 2))
(fma.f64 -1/3 (pow.f64 x 4) (*.f64 x x))
(fma.f64 (pow.f64 x 4) -1/3 (*.f64 x x))
(fma.f64 x x (*.f64 (pow.f64 x 4) -1/3))
(+.f64 (*.f64 -1/3 (pow.f64 x 4)) (+.f64 (*.f64 2/45 (pow.f64 x 6)) (pow.f64 x 2)))
(fma.f64 -1/3 (pow.f64 x 4) (fma.f64 2/45 (pow.f64 x 6) (*.f64 x x)))
(fma.f64 (pow.f64 x 4) -1/3 (fma.f64 x x (*.f64 (pow.f64 x 6) 2/45)))
(fma.f64 x x (fma.f64 (pow.f64 x 4) -1/3 (*.f64 (pow.f64 x 6) 2/45)))
(fma.f64 x x (fma.f64 (pow.f64 x 6) 2/45 (*.f64 (pow.f64 x 4) -1/3)))
(+.f64 (*.f64 -1/3 (pow.f64 x 4)) (+.f64 (*.f64 -1/315 (pow.f64 x 8)) (+.f64 (*.f64 2/45 (pow.f64 x 6)) (pow.f64 x 2))))
(fma.f64 -1/3 (pow.f64 x 4) (fma.f64 -1/315 (pow.f64 x 8) (fma.f64 2/45 (pow.f64 x 6) (*.f64 x x))))
(fma.f64 (pow.f64 x 4) -1/3 (fma.f64 (pow.f64 x 8) -1/315 (fma.f64 x x (*.f64 (pow.f64 x 6) 2/45))))
(fma.f64 (pow.f64 x 4) -1/3 (fma.f64 (pow.f64 x 6) 2/45 (fma.f64 x x (*.f64 (pow.f64 x 8) -1/315))))
(fma.f64 (pow.f64 x 4) -1/3 (fma.f64 (pow.f64 x 6) 2/45 (fma.f64 (pow.f64 x 8) -1/315 (*.f64 x x))))
(fma.f64 (pow.f64 x 4) -1/3 (fma.f64 x x (fma.f64 (pow.f64 x 8) -1/315 (*.f64 (pow.f64 x 6) 2/45))))
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
(pow.f64 (sin.f64 x) 2)
2
(+.f64 2 (*.f64 -1/2 (pow.f64 x 2)))
(+.f64 2 (*.f64 (*.f64 x x) -1/2))
(fma.f64 (*.f64 x x) -1/2 2)
(fma.f64 x (*.f64 x -1/2) 2)
(+.f64 2 (+.f64 (*.f64 -1/2 (pow.f64 x 2)) (*.f64 1/24 (pow.f64 x 4))))
(+.f64 2 (fma.f64 -1/2 (*.f64 x x) (*.f64 (pow.f64 x 4) 1/24)))
(+.f64 2 (fma.f64 (pow.f64 x 4) 1/24 (*.f64 x (*.f64 x -1/2))))
(fma.f64 x (*.f64 x -1/2) (fma.f64 (pow.f64 x 4) 1/24 2))
(fma.f64 (pow.f64 x 4) 1/24 (fma.f64 x (*.f64 x -1/2) 2))
(+.f64 2 (+.f64 (*.f64 -1/2 (pow.f64 x 2)) (+.f64 (*.f64 1/24 (pow.f64 x 4)) (*.f64 -1/720 (pow.f64 x 6)))))
(+.f64 2 (fma.f64 -1/2 (*.f64 x x) (fma.f64 1/24 (pow.f64 x 4) (*.f64 (pow.f64 x 6) -1/720))))
(+.f64 (fma.f64 (*.f64 x x) -1/2 2) (fma.f64 (pow.f64 x 4) 1/24 (*.f64 (pow.f64 x 6) -1/720)))
(+.f64 2 (fma.f64 (pow.f64 x 4) 1/24 (fma.f64 x (*.f64 x -1/2) (*.f64 (pow.f64 x 6) -1/720))))
(+.f64 (fma.f64 x (*.f64 x -1/2) 2) (fma.f64 (pow.f64 x 6) -1/720 (*.f64 (pow.f64 x 4) 1/24)))
(+.f64 2 (fma.f64 x (*.f64 x -1/2) (fma.f64 (pow.f64 x 4) 1/24 (*.f64 (pow.f64 x 6) -1/720))))
(+.f64 (cos.f64 x) 1)
(+.f64 1 (cos.f64 x))
(+.f64 (cos.f64 x) 1)
(+.f64 1 (cos.f64 x))
(+.f64 (cos.f64 x) 1)
(+.f64 1 (cos.f64 x))
(+.f64 (cos.f64 x) 1)
(+.f64 1 (cos.f64 x))
1/2
(+.f64 (*.f64 1/8 (pow.f64 x 2)) 1/2)
(fma.f64 1/8 (*.f64 x x) 1/2)
(fma.f64 (*.f64 x x) 1/8 1/2)
(fma.f64 x (*.f64 x 1/8) 1/2)
(+.f64 (*.f64 1/8 (pow.f64 x 2)) (+.f64 1/2 (*.f64 1/48 (pow.f64 x 4))))
(+.f64 (fma.f64 1/8 (*.f64 x x) 1/2) (*.f64 (pow.f64 x 4) 1/48))
(fma.f64 (*.f64 x x) 1/8 (fma.f64 (pow.f64 x 4) 1/48 1/2))
(fma.f64 x (*.f64 x 1/8) (fma.f64 (pow.f64 x 4) 1/48 1/2))
(fma.f64 (pow.f64 x 4) 1/48 (fma.f64 (*.f64 x x) 1/8 1/2))
(fma.f64 (pow.f64 x 4) 1/48 (fma.f64 x (*.f64 x 1/8) 1/2))
(+.f64 (*.f64 1/8 (pow.f64 x 2)) (+.f64 1/2 (+.f64 (*.f64 17/5760 (pow.f64 x 6)) (*.f64 1/48 (pow.f64 x 4)))))
(+.f64 (fma.f64 1/8 (*.f64 x x) 1/2) (fma.f64 17/5760 (pow.f64 x 6) (*.f64 (pow.f64 x 4) 1/48)))
(+.f64 (fma.f64 (*.f64 x x) 1/8 1/2) (fma.f64 (pow.f64 x 4) 1/48 (*.f64 (pow.f64 x 6) 17/5760)))
(fma.f64 x (*.f64 x 1/8) (fma.f64 (pow.f64 x 4) 1/48 (fma.f64 (pow.f64 x 6) 17/5760 1/2)))
(fma.f64 x (*.f64 x 1/8) (fma.f64 (pow.f64 x 6) 17/5760 (fma.f64 (pow.f64 x 4) 1/48 1/2)))
(/.f64 1 (+.f64 (cos.f64 x) 1))
(/.f64 1 (+.f64 1 (cos.f64 x)))
(/.f64 1 (+.f64 (cos.f64 x) 1))
(/.f64 1 (+.f64 1 (cos.f64 x)))
(/.f64 1 (+.f64 (cos.f64 x) 1))
(/.f64 1 (+.f64 1 (cos.f64 x)))
(/.f64 1 (+.f64 (cos.f64 x) 1))
(/.f64 1 (+.f64 1 (cos.f64 x)))

localize4.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 1/2 (*.f64 x x))
Compiler

Compiled 11 to 5 computations (54.5% saved)

series3.0ms (0%)

Counts
1 → 12
Calls

3 calls:

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

rewrite43.0ms (0.5%)

Algorithm
batch-egg-rewrite
Rules
432×pow1_binary64
420×add-sqr-sqrt_binary64
411×*-un-lft-identity_binary64
401×add-log-exp_binary64
401×log1p-expm1-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify170.0ms (2.1%)

Algorithm
egg-herbie
Rules
1082×sqr-pow_binary64
617×cube-prod_binary64
554×fabs-mul_binary64
523×pow-sqr_binary64
456×associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0684
11284
22284
34484
410684
533484
6125984
7213684
8230084
9248484
10269284
11299184
12338484
13386584
14443384
15512184
16595484
17634684
18663684
19691084
20698284
21701884
22795984
Stop Event
node limit
Counts
26 → 16
Calls
Call 1
Inputs
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
Outputs
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))

localize16.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))
0.3b
(*.f64 x -1/24)
Compiler

Compiled 26 to 15 computations (42.3% saved)

series4.0ms (0%)

Counts
2 → 24
Calls

6 calls:

TimeVariablePointExpression
1.0ms
x
@inf
(*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))
1.0ms
x
@-inf
(*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))
1.0ms
x
@0
(*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))
1.0ms
x
@0
(*.f64 x -1/24)
0.0ms
x
@-inf
(*.f64 x -1/24)

rewrite60.0ms (0.7%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
0818
116418
2188418
Stop Event
node limit
Counts
2 → 26
Calls
Call 1
Inputs
(*.f64 x -1/24)
(*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x -1/24)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x -1/24) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x -1/24) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x -1/24)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x -1/24)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (*.f64 x x) 1/576))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 x) -1/24))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x -1/24) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x -1/24)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x -1/24)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x -1/24)))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 1/2 (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x -1/24))) (*.f64 (*.f64 x x) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (sqrt.f64 (fma.f64 x (*.f64 x -1/24) 1/2))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (pow.f64 x 4) (pow.f64 (fma.f64 x (*.f64 x -1/24) 1/2) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (exp.f64 x) x) (fma.f64 x (*.f64 x -1/24) 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 x x) 3) (pow.f64 (fma.f64 x (*.f64 x -1/24) 1/2) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (fma.f64 x (*.f64 x -1/24) 1/2) 3) (pow.f64 (*.f64 x x) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))))))))

simplify197.0ms (2.5%)

Algorithm
egg-herbie
Rules
1076×sqr-pow_binary64
670×fma-def_binary64
511×pow-sqr_binary64
446×cube-prod_binary64
427×associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
012195
124195
246195
3115195
4367195
51445195
62770195
73302195
83493195
93704195
103983195
114350195
124833195
135366195
145990195
156743195
167055195
177279195
187475195
197531195
207553195
Stop Event
node limit
Counts
50 → 32
Calls
Call 1
Inputs
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 1/2 (pow.f64 x 2))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(*.f64 -1/24 (pow.f64 x 4))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(*.f64 -1/24 (pow.f64 x 4))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
Outputs
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 -1/24 x)
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 x (*.f64 x 1/2))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 x (*.f64 x 1/2)))
(*.f64 x (*.f64 x (fma.f64 -1/24 (*.f64 x x) 1/2)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 x (*.f64 x 1/2)))
(*.f64 x (*.f64 x (fma.f64 -1/24 (*.f64 x x) 1/2)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 x (*.f64 x 1/2)))
(*.f64 x (*.f64 x (fma.f64 -1/24 (*.f64 x x) 1/2)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))
(*.f64 -1/24 (pow.f64 x 4))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 x (*.f64 x 1/2)))
(*.f64 x (*.f64 x (fma.f64 -1/24 (*.f64 x x) 1/2)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 x (*.f64 x 1/2)))
(*.f64 x (*.f64 x (fma.f64 -1/24 (*.f64 x x) 1/2)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 x (*.f64 x 1/2)))
(*.f64 x (*.f64 x (fma.f64 -1/24 (*.f64 x x) 1/2)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))
(*.f64 -1/24 (pow.f64 x 4))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 x (*.f64 x 1/2)))
(*.f64 x (*.f64 x (fma.f64 -1/24 (*.f64 x x) 1/2)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 x (*.f64 x 1/2)))
(*.f64 x (*.f64 x (fma.f64 -1/24 (*.f64 x x) 1/2)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 x (*.f64 x 1/2)))
(*.f64 x (*.f64 x (fma.f64 -1/24 (*.f64 x x) 1/2)))
(fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/2 (*.f64 x x)))

localize15.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(*.f64 1/2 (pow.f64 x 2))
0.1b
(*.f64 -1/24 (pow.f64 x 4))
Compiler

Compiled 33 to 26 computations (21.2% saved)

series2.0ms (0%)

Counts
2 → 0
Calls

6 calls:

TimeVariablePointExpression
1.0ms
x
@0
(*.f64 -1/24 (pow.f64 x 4))
0.0ms
x
@inf
(*.f64 -1/24 (pow.f64 x 4))
0.0ms
x
@-inf
(*.f64 -1/24 (pow.f64 x 4))
0.0ms
x
@inf
(*.f64 1/2 (pow.f64 x 2))
0.0ms
x
@-inf
(*.f64 1/2 (pow.f64 x 2))

rewrite59.0ms (0.7%)

Algorithm
batch-egg-rewrite
Rules
764×pow1_binary64
712×add-log-exp_binary64
712×log1p-expm1-u_binary64
712×expm1-log1p-u_binary64
698×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01014
120714
2205914
Stop Event
node limit
Counts
2 → 22
Calls
Call 1
Inputs
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 1/2 (pow.f64 x 2))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 -1/24 (pow.f64 x 4))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 -1/24 (pow.f64 x 4)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 -1/24 (pow.f64 x 4)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 -1/24 (pow.f64 x 4))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 x x) (sqrt.f64 -1/24)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (pow.f64 x 8) 1/576))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 -1/24) (pow.f64 x 4)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 -1/24 (pow.f64 x 4)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 -1/24 (pow.f64 x 4))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 -1/24 (pow.f64 x 4))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 -1/24 (pow.f64 x 4))))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (*.f64 x 1/2))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (*.f64 x 1/2)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (*.f64 x 1/2)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (*.f64 x 1/2))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (sqrt.f64 1/2)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (pow.f64 x 4) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 1/2) (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (*.f64 x 1/2)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (*.f64 x 1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (*.f64 x 1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (*.f64 x 1/2))))))))

simplify7.0ms (0.1%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
000
Stop Event
saturated
Counts
22 → 22
Calls
Call 1
Inputs
Outputs

localize16.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
2.9b
(-.f64 1 (cos.f64 x))
2.9b
(log.f64 (exp.f64 (-.f64 1 (cos.f64 x))))
Compiler

Compiled 20 to 12 computations (40% saved)

series2.0ms (0%)

Counts
1 → 12
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@0
(log.f64 (exp.f64 (-.f64 1 (cos.f64 x))))
1.0ms
x
@-inf
(log.f64 (exp.f64 (-.f64 1 (cos.f64 x))))
1.0ms
x
@inf
(log.f64 (exp.f64 (-.f64 1 (cos.f64 x))))

rewrite81.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
592×pow1_binary64
549×log1p-expm1-u_binary64
549×expm1-log1p-u_binary64
548×add-log-exp_binary64
537×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
076
11246
214486
Stop Event
node limit
Counts
1 → 34
Calls
Call 1
Inputs
(log.f64 (exp.f64 (-.f64 1 (cos.f64 x))))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (neg.f64 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (*.f64 (neg.f64 (cos.f64 x)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (-.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (neg.f64 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (exp.f64 (-.f64 1 (cos.f64 x)))) 2)) (log.f64 (cbrt.f64 (exp.f64 (-.f64 1 (cos.f64 x))))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (exp.f64 (-.f64 1 (cos.f64 x))))) (log.f64 (sqrt.f64 (exp.f64 (-.f64 1 (cos.f64 x))))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 1 (cos.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (-.f64 1 (cos.f64 x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 1 (+.f64 1 (+.f64 (cos.f64 x) (pow.f64 (cos.f64 x) 2)))) (/.f64 (pow.f64 (cos.f64 x) 3) (+.f64 1 (+.f64 (cos.f64 x) (pow.f64 (cos.f64 x) 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 1 (+.f64 1 (cos.f64 x))) (/.f64 (pow.f64 (cos.f64 x) 2) (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (-.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 1 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (-.f64 1 (cos.f64 x))) (pow.f64 (cbrt.f64 (-.f64 1 (cos.f64 x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (-.f64 1 (cos.f64 x))) 2) (cbrt.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (-.f64 1 (cos.f64 x))) (sqrt.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 1 (pow.f64 (cos.f64 x) 3)) (/.f64 1 (+.f64 1 (+.f64 (cos.f64 x) (pow.f64 (cos.f64 x) 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (/.f64 1 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 1 (+.f64 (cos.f64 x) (pow.f64 (cos.f64 x) 2))) (-.f64 1 (pow.f64 (cos.f64 x) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 1 (cos.f64 x)) (*.f64 (sin.f64 x) (sin.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1 (pow.f64 (cos.f64 x) 3)) (+.f64 1 (+.f64 (cos.f64 x) (pow.f64 (cos.f64 x) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (+.f64 1 (cos.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 1 (pow.f64 (cos.f64 x) 3))) (neg.f64 (+.f64 1 (+.f64 (cos.f64 x) (pow.f64 (cos.f64 x) 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (*.f64 (sin.f64 x) (sin.f64 x))) (neg.f64 (+.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 1 (pow.f64 (neg.f64 (cos.f64 x)) 3)) (+.f64 1 (-.f64 (*.f64 (neg.f64 (cos.f64 x)) (neg.f64 (cos.f64 x))) (neg.f64 (cos.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 1 (*.f64 (neg.f64 (cos.f64 x)) (neg.f64 (cos.f64 x)))) (-.f64 1 (neg.f64 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (-.f64 1 (cos.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (-.f64 1 (cos.f64 x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (-.f64 1 (cos.f64 x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (-.f64 1 (cos.f64 x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (-.f64 1 (cos.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log1p.f64 (neg.f64 (cos.f64 x))))))))

simplify122.0ms (1.5%)

Algorithm
egg-herbie
Rules
599×distribute-rgt-out_binary64
520×sqr-pow_binary64
481×associate-+l+_binary64
478×distribute-lft-out_binary64
413×unswap-sqr_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
027118
162118
2136118
3440118
41998118
54415118
64800118
75317118
86315118
97299118
107739118
Stop Event
node limit
Counts
46 → 42
Calls
Call 1
Inputs
(*.f64 1/2 (pow.f64 x 2))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (*.f64 1/720 (pow.f64 x 6))))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (+.f64 (*.f64 1/720 (pow.f64 x 6)) (*.f64 -1/40320 (pow.f64 x 8)))))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
Outputs
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(fma.f64 1/2 (*.f64 x x) (*.f64 -1/24 (pow.f64 x 4)))
(*.f64 (*.f64 x x) (fma.f64 (*.f64 x x) -1/24 1/2))
(*.f64 x (*.f64 x (fma.f64 (*.f64 x x) -1/24 1/2)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (*.f64 1/720 (pow.f64 x 6))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 -1/24 (pow.f64 x 4) (*.f64 1/720 (pow.f64 x 6))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 1/720 (pow.f64 x 6) (*.f64 -1/24 (pow.f64 x 4))))
(fma.f64 (*.f64 x x) (fma.f64 (*.f64 x x) -1/24 1/2) (*.f64 1/720 (pow.f64 x 6)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 -1/24 (pow.f64 x 4)) (+.f64 (*.f64 1/720 (pow.f64 x 6)) (*.f64 -1/40320 (pow.f64 x 8)))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 -1/24 (pow.f64 x 4) (fma.f64 1/720 (pow.f64 x 6) (*.f64 -1/40320 (pow.f64 x 8)))))
(fma.f64 1/2 (*.f64 x x) (fma.f64 1/720 (pow.f64 x 6) (fma.f64 -1/24 (pow.f64 x 4) (*.f64 -1/40320 (pow.f64 x 8)))))
(fma.f64 1/720 (pow.f64 x 6) (fma.f64 -1/40320 (pow.f64 x 8) (*.f64 (*.f64 x x) (fma.f64 (*.f64 x x) -1/24 1/2))))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))
(-.f64 1 (cos.f64 x))

eval148.0ms (1.8%)

Compiler

Compiled 5163 to 3109 computations (39.8% saved)

prune57.0ms (0.7%)

Pruning

5 alts after pruning (4 fresh and 1 done)

PrunedKeptTotal
New3724376
Fresh101
Picked101
Done415
Total3785383
Error
0b
Counts
383 → 5
Alt Table
Click to see full alt table
StatusErrorProgram
29.6b
(-.f64 1 (cos.f64 x))
0.3b
(*.f64 x (*.f64 x 1/2))
29.8b
(-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1)
0b
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
0.1b
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 1/2 (*.f64 x x)))
Compiler

Compiled 45 to 31 computations (31.1% saved)

localize5.0ms (0.1%)

Compiler

Compiled 11 to 7 computations (36.4% saved)

localize9.0ms (0.1%)

Compiler

Compiled 19 to 12 computations (36.8% saved)

localize19.0ms (0.2%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.0b
(*.f64 1/2 (*.f64 x x))
0.1b
(*.f64 x (*.f64 x -1/24))
0.1b
(*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x))
0.3b
(*.f64 x -1/24)
Compiler

Compiled 44 to 22 computations (50% saved)

series2.0ms (0%)

Counts
2 → 24
Calls

6 calls:

TimeVariablePointExpression
0.0ms
x
@inf
(*.f64 x (*.f64 x -1/24))
0.0ms
x
@0
(*.f64 x (*.f64 x -1/24))
0.0ms
x
@0
(*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x))
0.0ms
x
@inf
(*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x))
0.0ms
x
@-inf
(*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x))

rewrite65.0ms (0.8%)

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

Useful iterations: 1 (0.0ms)

IterNodesCost
0720
114514
2174814
Stop Event
node limit
Counts
2 → 26
Calls
Call 1
Inputs
(*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x))
(*.f64 x (*.f64 x -1/24))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (pow.f64 x 4) -1/24)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (pow.f64 x 4) -1/24) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (pow.f64 x 4) -1/24) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (pow.f64 x 4) -1/24)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (*.f64 x (sqrt.f64 -1/24))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (pow.f64 x 4) -1/24) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 (pow.f64 x 4) -1/24)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (pow.f64 x 4) -1/24) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 x (*.f64 x -1/24)) 3) (pow.f64 (*.f64 x x) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 x x) 3) (pow.f64 (*.f64 x (*.f64 x -1/24)) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (pow.f64 x 4) -1/24)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (pow.f64 x 4) -1/24)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (pow.f64 x 4) -1/24)))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (*.f64 x -1/24))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (*.f64 x -1/24)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (*.f64 x -1/24)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (*.f64 x -1/24))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (sqrt.f64 -1/24)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (pow.f64 x 4) 1/576))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (exp.f64 x) x) -1/24))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (*.f64 x -1/24)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 x 3) (pow.f64 (*.f64 x -1/24) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 x -1/24) 3) (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (*.f64 x -1/24))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (*.f64 x -1/24))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (*.f64 x -1/24))))))))

simplify203.0ms (2.5%)

Algorithm
egg-herbie
Rules
1319×sqr-pow_binary64
659×pow-sqr_binary64
493×cube-prod_binary64
406×fabs-mul_binary64
405×associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
09168
118168
236168
387168
4292168
51152168
61887168
72011168
82180168
92379168
102652168
113011168
123464168
133993168
144621168
155370168
165682168
175904168
186106168
196162168
206186168
217020168
227933168
Stop Event
node limit
Counts
50 → 29
Calls
Call 1
Inputs
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (pow.f64 x 2))
Outputs
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 4))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))
(*.f64 -1/24 (pow.f64 x 2))
(*.f64 -1/24 (*.f64 x x))

localize9.0ms (0.1%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(*.f64 1/2 (*.f64 x x))
2.9b
(-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1)
Compiler

Compiled 28 to 16 computations (42.9% saved)

series1.0ms (0%)

Counts
1 → 12
Calls

3 calls:

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

rewrite635.0ms (7.9%)

Algorithm
batch-egg-rewrite
Rules
816×pow1_binary64
767×add-log-exp_binary64
766×log1p-expm1-u_binary64
766×expm1-log1p-u_binary64
754×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify173.0ms (2.2%)

Algorithm
egg-herbie
Rules
1082×sqr-pow_binary64
617×cube-prod_binary64
554×fabs-mul_binary64
523×pow-sqr_binary64
456×associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0684
11284
22284
34484
410684
533484
6125984
7213684
8230084
9248484
10269284
11299184
12338484
13386584
14443384
15512184
16595484
17634684
18663684
19691084
20698284
21701884
22795984
Stop Event
node limit
Counts
58 → 47
Calls
Call 1
Inputs
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (pow.f64 x 2))
Outputs
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))
(*.f64 1/2 (pow.f64 x 2))
(*.f64 1/2 (*.f64 x x))

eval41.0ms (0.5%)

Compiler

Compiled 1778 to 1118 computations (37.1% saved)

prune17.0ms (0.2%)

Pruning

6 alts after pruning (1 fresh and 5 done)

PrunedKeptTotal
New1191120
Fresh000
Picked011
Done044
Total1196125
Error
0b
Counts
125 → 6
Alt Table
Click to see full alt table
StatusErrorProgram
29.6b
(-.f64 1 (cos.f64 x))
0.3b
(*.f64 x (*.f64 x 1/2))
29.8b
(-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1)
0b
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
0.1b
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 1/2 (*.f64 x x)))
29.8b
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1))
Compiler

Compiled 65 to 44 computations (32.3% saved)

localize25.0ms (0.3%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.1b
(*.f64 x (*.f64 x -1/24))
0.1b
(*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x))
0.3b
(*.f64 x -1/24)
2.9b
(-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1)
Compiler

Compiled 65 to 37 computations (43.1% saved)

eval35.0ms (0.4%)

Compiler

Compiled 1908 to 1195 computations (37.4% saved)

prune13.0ms (0.2%)

Pruning

6 alts after pruning (0 fresh and 6 done)

PrunedKeptTotal
New88088
Fresh000
Picked011
Done055
Total88694
Error
0b
Counts
94 → 6
Alt Table
Click to see full alt table
StatusErrorProgram
29.6b
(-.f64 1 (cos.f64 x))
0.3b
(*.f64 x (*.f64 x 1/2))
29.8b
(-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1)
0b
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
0.1b
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 1/2 (*.f64 x x)))
29.8b
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1))
Compiler

Compiled 65 to 44 computations (32.3% saved)

regimes20.0ms (0.3%)

Counts
12 → 1
Calls
Call 1
Inputs
(*.f64 x (*.f64 x 1/2))
(*.f64 1/2 (*.f64 x x))
(-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1)
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1))
(-.f64 1 (cos.f64 x))
(*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(+.f64 (*.f64 1/2 (pow.f64 x 2)) (*.f64 -1/24 (pow.f64 x 4)))
(log.f64 (exp.f64 (-.f64 1 (cos.f64 x))))
(/.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (+.f64 1 (cos.f64 x)))
(*.f64 (*.f64 (sin.f64 x) (sin.f64 x)) (/.f64 1 (+.f64 1 (cos.f64 x))))
Outputs
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
Calls

5 calls:

8.0ms
x
2.0ms
(cos.f64 x)
2.0ms
(-.f64 1 (cos.f64 x))
2.0ms
(cos.f64 x)
2.0ms
(-.f64 1 (cos.f64 x))
Results
ErrorSegmentsBranch
0b1x
0b1(-.f64 1 (cos.f64 x))
0b1(-.f64 1 (cos.f64 x))
0b1(cos.f64 x)
0b1(cos.f64 x)
Compiler

Compiled 132 to 79 computations (40.2% saved)

regimes11.0ms (0.1%)

Counts
7 → 1
Calls
Call 1
Inputs
(*.f64 x (*.f64 x 1/2))
(*.f64 1/2 (*.f64 x x))
(-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1)
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1))
(-.f64 1 (cos.f64 x))
(*.f64 (*.f64 x x) (fma.f64 x (*.f64 x -1/24) 1/2))
Outputs
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 1/2 (*.f64 x x)))
Calls

3 calls:

5.0ms
x
2.0ms
(cos.f64 x)
2.0ms
(-.f64 1 (cos.f64 x))
Results
ErrorSegmentsBranch
0.1b1x
0.1b1(-.f64 1 (cos.f64 x))
0.1b1(cos.f64 x)
Compiler

Compiled 78 to 46 computations (41% saved)

regimes4.0ms (0.1%)

Accuracy

Total -29.5b remaining (-10145.2%)

Threshold costs -29.5b (-10145.2%)

Counts
3 → 1
Calls
Call 1
Inputs
(*.f64 x (*.f64 x 1/2))
(*.f64 1/2 (*.f64 x x))
(-.f64 (+.f64 1 (*.f64 1/2 (*.f64 x x))) 1)
Outputs
(*.f64 x (*.f64 x 1/2))
Calls

1 calls:

3.0ms
x
Results
ErrorSegmentsBranch
0.3b1x
Compiler

Compiled 22 to 14 computations (36.4% saved)

simplify3.0ms (0%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
01740
12540
Stop Event
done
saturated
Calls
Call 1
Inputs
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 1/2 (*.f64 x x)))
(*.f64 x (*.f64 x 1/2))
Outputs
(*.f64 (sin.f64 x) (tan.f64 (/.f64 x 2)))
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 1/2 (*.f64 x x)))
(+.f64 (*.f64 (*.f64 x (*.f64 x -1/24)) (*.f64 x x)) (*.f64 (*.f64 x x) 1/2))
(*.f64 x (*.f64 x 1/2))
Compiler

Compiled 30 to 19 computations (36.7% saved)

soundness122.0ms (1.5%)

Algorithm
egg-herbie
Rules
890×distribute-lft-out_binary64
720×associate-/l/_binary64
671×associate-*l/_binary64
406×associate-+l+_binary64
362×associate-/r/_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
068450
1155446
2367442
31167418
41930418
53506418
64448418
76190418
87466418
97948418
Stop Event
node limit
Compiler

Compiled 61 to 43 computations (29.5% saved)

end23.0ms (0.3%)

Compiler

Compiled 28 to 17 computations (39.3% saved)

Profiling

Loading profile data...