Details

Time bar (total: 2.2s)

analyze2.0ms (0.1%)

Algorithm
search
Search
TrueOtherFalseIter
0%100%0%0
0%100%0%1
0%50%50%2
25%25%50%3
25%12.5%62.5%4
25%6.2%68.8%5
25%3.1%71.9%6
25%1.6%73.5%7
25%0.8%74.2%8
25%0.4%74.6%9
25%0.2%74.8%10
25%0.1%74.9%11
25%0%75%12
Compiler

Compiled 8 to 5 computations (37.5% saved)

sample985.0ms (44.1%)

Results
971.0ms8248×body64valid
1.0msbody128valid
1.0ms13×body64invalid

preprocess110.0ms (4.9%)

Algorithm
egg-herbie
Rules
1883×fma-neg_binary64
921×unsub-neg_binary64
684×fma-def_binary64
590×associate-+l+_binary64
364×associate-+r+_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0510
1710
21210
31910
42810
54510
68310
712410
820110
939510
1083310
11218910
12424710
13473710
14491110
15496610
16497610
17497610
18608810
19609610
20614810
21614810
22727810
011
Stop Event
saturated
node limit
Calls
Call 1
Inputs
0
Outputs
0
Call 2
Inputs
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Outputs
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Compiler

Compiled 7 to 4 computations (42.9% saved)

simplify98.0ms (4.4%)

Algorithm
egg-herbie
Rules
1883×fma-neg_binary64
921×unsub-neg_binary64
684×fma-def_binary64
590×associate-+l+_binary64
364×associate-+r+_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0510
1710
21210
31910
42810
54510
68310
712410
820110
939510
1083310
11218910
12424710
13473710
14491110
15496610
16497610
17497610
18608810
19609610
20614810
21614810
22727810
Stop Event
node limit
Counts
1 → 1
Calls
Call 1
Inputs
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Outputs
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))

prune1.0ms (0.1%)

Pruning

2 alts after pruning (2 fresh and 0 done)

PrunedKeptTotal
New011
Fresh011
Picked000
Done000
Total022
Error
0.3b
Counts
2 → 1
Alt Table
StatusErrorProgram
0.3b
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Compiler

Compiled 21 to 12 computations (42.9% saved)

localize5.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.1b
(log.f64 (log.f64 x))
0.3b
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))

series129.0ms (5.8%)

Counts
2 → 16
Calls

6 calls:

TimeVariablePointExpression
51.0ms
x
@-inf
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
46.0ms
x
@0
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
30.0ms
x
@inf
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
0.0ms
x
@0
(log.f64 (log.f64 x))
0.0ms
x
@-inf
(log.f64 (log.f64 x))

rewrite63.0ms (2.8%)

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

Useful iterations: 0 (0.0ms)

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

simplify122.0ms (5.4%)

Algorithm
egg-herbie
Rules
2842×fma-neg_binary64
987×fma-def_binary64
859×distribute-rgt-in_binary64
684×unsub-neg_binary64
580×distribute-lft-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
016216
138120
273120
3189120
4612120
51448120
62659120
74352120
84941120
95093120
105131120
115135120
125135120
135319120
146926120
157304120
167404120
177452120
187484120
197484120
Stop Event
node limit
Counts
69 → 59
Calls
Call 1
Inputs
(-.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(-.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(-.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(-.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(-.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) (log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))
(-.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) (log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))
(-.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) (log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))
(-.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) (log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))
(log.f64 (*.f64 -1 (log.f64 (/.f64 1 x))))
(log.f64 (*.f64 -1 (log.f64 (/.f64 1 x))))
(log.f64 (*.f64 -1 (log.f64 (/.f64 1 x))))
(log.f64 (*.f64 -1 (log.f64 (/.f64 1 x))))
(log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
Outputs
(-.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(-.f64 (neg.f64 (neg.f64 (log.f64 x))) (log.f64 (neg.f64 (neg.f64 (log.f64 x)))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(-.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(-.f64 (neg.f64 (neg.f64 (log.f64 x))) (log.f64 (neg.f64 (neg.f64 (log.f64 x)))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(-.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(-.f64 (neg.f64 (neg.f64 (log.f64 x))) (log.f64 (neg.f64 (neg.f64 (log.f64 x)))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(-.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(-.f64 (neg.f64 (neg.f64 (log.f64 x))) (log.f64 (neg.f64 (neg.f64 (log.f64 x)))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(-.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) (log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))
(-.f64 (neg.f64 (neg.f64 (log.f64 x))) (log.f64 (neg.f64 (neg.f64 (log.f64 x)))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(-.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) (log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))
(-.f64 (neg.f64 (neg.f64 (log.f64 x))) (log.f64 (neg.f64 (neg.f64 (log.f64 x)))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(-.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) (log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))
(-.f64 (neg.f64 (neg.f64 (log.f64 x))) (log.f64 (neg.f64 (neg.f64 (log.f64 x)))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(-.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) (log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))
(-.f64 (neg.f64 (neg.f64 (log.f64 x))) (log.f64 (neg.f64 (neg.f64 (log.f64 x)))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(log.f64 (*.f64 -1 (log.f64 (/.f64 1 x))))
(log.f64 (neg.f64 (neg.f64 (log.f64 x))))
(log.f64 (log.f64 x))
(log.f64 (*.f64 -1 (log.f64 (/.f64 1 x))))
(log.f64 (neg.f64 (neg.f64 (log.f64 x))))
(log.f64 (log.f64 x))
(log.f64 (*.f64 -1 (log.f64 (/.f64 1 x))))
(log.f64 (neg.f64 (neg.f64 (log.f64 x))))
(log.f64 (log.f64 x))
(log.f64 (*.f64 -1 (log.f64 (/.f64 1 x))))
(log.f64 (neg.f64 (neg.f64 (log.f64 x))))
(log.f64 (log.f64 x))
(log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(log.f64 (neg.f64 (neg.f64 (log.f64 x))))
(log.f64 (log.f64 x))
(log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(log.f64 (neg.f64 (neg.f64 (log.f64 x))))
(log.f64 (log.f64 x))
(log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(log.f64 (neg.f64 (neg.f64 (log.f64 x))))
(log.f64 (log.f64 x))
(log.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(log.f64 (neg.f64 (neg.f64 (log.f64 x))))
(log.f64 (log.f64 x))

prune80.0ms (3.6%)

Pruning

3 alts after pruning (2 fresh and 1 done)

PrunedKeptTotal
New57259
Fresh000
Picked011
Done000
Total57360
Error
0b
Counts
60 → 3
Alt Table
StatusErrorProgram
0.0b
(log.f64 (/.f64 x (log.f64 x)))
1.5b
(*.f64 (-.f64 (pow.f64 (log.f64 x) 3) (pow.f64 (log.f64 (log.f64 x)) 3)) (/.f64 1 (+.f64 (pow.f64 (log.f64 x) 2) (*.f64 (log.f64 (log.f64 x)) (log.f64 (*.f64 x (log.f64 x)))))))
0.3b
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Compiler

Compiled 813 to 322 computations (60.4% saved)

localize8.0ms (0.3%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(log.f64 (/.f64 x (log.f64 x)))
0.3b
(/.f64 x (log.f64 x))

series67.0ms (3%)

Counts
2 → 20
Calls

6 calls:

TimeVariablePointExpression
21.0ms
x
@-inf
(log.f64 (/.f64 x (log.f64 x)))
19.0ms
x
@0
(log.f64 (/.f64 x (log.f64 x)))
14.0ms
x
@inf
(log.f64 (/.f64 x (log.f64 x)))
7.0ms
x
@inf
(/.f64 x (log.f64 x))
5.0ms
x
@-inf
(/.f64 x (log.f64 x))

rewrite43.0ms (1.9%)

Algorithm
batch-egg-rewrite
Rules
515×pow1_binary64
492×add-sqr-sqrt_binary64
476×add-log-exp_binary64
476×log1p-expm1-u_binary64
476×expm1-log1p-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0514
110014
2128314
Stop Event
node limit
Counts
2 → 62
Calls
Call 1
Inputs
(/.f64 x (log.f64 x))
(log.f64 (/.f64 x (log.f64 x)))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (-.f64 (/.f64 x (log.f64 x)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (/.f64 x (log.f64 x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 x (/.f64 1 (log.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 x (log.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (/.f64 x (log.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (/.f64 1 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (/.f64 x (log.f64 x))) (pow.f64 (cbrt.f64 (/.f64 x (log.f64 x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (/.f64 x (log.f64 x))) 2) (cbrt.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (/.f64 1 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (/.f64 x (log.f64 x))) (sqrt.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (neg.f64 x) (/.f64 1 (neg.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (log.f64 x)) x)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (pow.f64 (cbrt.f64 x) 2) 1) (/.f64 (cbrt.f64 x) (log.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (sqrt.f64 x) 1) (/.f64 (sqrt.f64 x) (log.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (pow.f64 (cbrt.f64 (log.f64 x)) 2)) (/.f64 x (cbrt.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (pow.f64 (cbrt.f64 x) 2) (pow.f64 (cbrt.f64 (log.f64 x)) 2)) (cbrt.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (sqrt.f64 x) (pow.f64 (cbrt.f64 (log.f64 x)) 2)) (/.f64 (sqrt.f64 x) (cbrt.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (sqrt.f64 (log.f64 x))) (/.f64 x (sqrt.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (pow.f64 (cbrt.f64 x) 2) (sqrt.f64 (log.f64 x))) (/.f64 (cbrt.f64 x) (sqrt.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 x (log.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (/.f64 x (log.f64 x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (/.f64 x (log.f64 x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (/.f64 x (log.f64 x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (log.f64 x) x) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 1) (log.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (log.f64 (/.f64 x (log.f64 x))))) (sqrt.f64 (log.f64 (/.f64 x (log.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))) 2)) (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (/.f64 x (neg.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (/.f64 x (log.f64 x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (/.f64 x (log.f64 x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (/.f64 x (log.f64 x))))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (log.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (/.f64 x (log.f64 x))) 2)) (log.f64 (cbrt.f64 (/.f64 x (log.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (/.f64 x (log.f64 x)))) (log.f64 (sqrt.f64 (/.f64 x (log.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (log.f64 x) (log.f64 (log.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (log.f64 (/.f64 x (log.f64 x)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 0 (log.f64 (/.f64 (log.f64 x) x)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (log.f64 (neg.f64 x)) (log.f64 (neg.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (log.f64 (/.f64 x (log.f64 x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (log.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))) (pow.f64 (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))) 2) (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (log.f64 (/.f64 x (log.f64 x)))) (sqrt.f64 (log.f64 (/.f64 x (log.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (log.f64 x) 3) (pow.f64 (log.f64 (log.f64 x)) 3)) (+.f64 (pow.f64 (log.f64 x) 2) (+.f64 (*.f64 (log.f64 (log.f64 x)) (log.f64 (log.f64 x))) (*.f64 (log.f64 x) (log.f64 (log.f64 x))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (log.f64 x) 2) (*.f64 (log.f64 (log.f64 x)) (log.f64 (log.f64 x)))) (+.f64 (log.f64 x) (log.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (log.f64 (/.f64 x (log.f64 x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (log.f64 (/.f64 x (log.f64 x)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (log.f64 (/.f64 (log.f64 x) x)))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (log.f64 (/.f64 x (log.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (-.f64 (/.f64 x (log.f64 x)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (log.f64 (/.f64 x (log.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (log.f64 x)) 2) (cbrt.f64 (log.f64 x)) (neg.f64 (log.f64 (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (log.f64 x)) (sqrt.f64 (log.f64 x)) (neg.f64 (log.f64 (log.f64 x))))))))

simplify94.0ms (4.2%)

Algorithm
egg-herbie
Rules
840×div-sub_binary64
521×associate-/l/_binary64
449×sub-neg_binary64
402×distribute-rgt-in_binary64
345×fma-neg_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
025224
153200
292192
3243168
4628168
51406168
63592168
74724168
85899168
96708168
107136168
117382168
127570168
137650168
Stop Event
node limit
Counts
82 → 68
Calls
Call 1
Inputs
(*.f64 -1 (/.f64 x (log.f64 (/.f64 1 x))))
(*.f64 -1 (/.f64 x (log.f64 (/.f64 1 x))))
(*.f64 -1 (/.f64 x (log.f64 (/.f64 1 x))))
(*.f64 -1 (/.f64 x (log.f64 (/.f64 1 x))))
(/.f64 x (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(/.f64 x (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(/.f64 x (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(/.f64 x (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x))
(+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x))
(+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x))
(+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x))
(+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))))
Outputs
(*.f64 -1 (/.f64 x (log.f64 (/.f64 1 x))))
(neg.f64 (/.f64 x (neg.f64 (log.f64 x))))
(/.f64 (neg.f64 x) (neg.f64 (log.f64 x)))
(*.f64 1 (/.f64 x (log.f64 x)))
(/.f64 x (log.f64 x))
(*.f64 -1 (/.f64 x (log.f64 (/.f64 1 x))))
(neg.f64 (/.f64 x (neg.f64 (log.f64 x))))
(/.f64 (neg.f64 x) (neg.f64 (log.f64 x)))
(*.f64 1 (/.f64 x (log.f64 x)))
(/.f64 x (log.f64 x))
(*.f64 -1 (/.f64 x (log.f64 (/.f64 1 x))))
(neg.f64 (/.f64 x (neg.f64 (log.f64 x))))
(/.f64 (neg.f64 x) (neg.f64 (log.f64 x)))
(*.f64 1 (/.f64 x (log.f64 x)))
(/.f64 x (log.f64 x))
(*.f64 -1 (/.f64 x (log.f64 (/.f64 1 x))))
(neg.f64 (/.f64 x (neg.f64 (log.f64 x))))
(/.f64 (neg.f64 x) (neg.f64 (log.f64 x)))
(*.f64 1 (/.f64 x (log.f64 x)))
(/.f64 x (log.f64 x))
(/.f64 x (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(neg.f64 (/.f64 x (neg.f64 (log.f64 x))))
(/.f64 (neg.f64 x) (neg.f64 (log.f64 x)))
(*.f64 1 (/.f64 x (log.f64 x)))
(/.f64 x (log.f64 x))
(/.f64 x (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(neg.f64 (/.f64 x (neg.f64 (log.f64 x))))
(/.f64 (neg.f64 x) (neg.f64 (log.f64 x)))
(*.f64 1 (/.f64 x (log.f64 x)))
(/.f64 x (log.f64 x))
(/.f64 x (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(neg.f64 (/.f64 x (neg.f64 (log.f64 x))))
(/.f64 (neg.f64 x) (neg.f64 (log.f64 x)))
(*.f64 1 (/.f64 x (log.f64 x)))
(/.f64 x (log.f64 x))
(/.f64 x (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))
(neg.f64 (/.f64 x (neg.f64 (log.f64 x))))
(/.f64 (neg.f64 x) (neg.f64 (log.f64 x)))
(*.f64 1 (/.f64 x (log.f64 x)))
(/.f64 x (log.f64 x))
(+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))))
(+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))

prune119.0ms (5.3%)

Pruning

1 alts after pruning (1 fresh and 0 done)

PrunedKeptTotal
New67168
Fresh101
Picked101
Done101
Total70171
Error
0b
Counts
71 → 1
Alt Table
StatusErrorProgram
0b
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
Compiler

Compiled 716 to 300 computations (58.1% saved)

localize6.0ms (0.3%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(log.f64 (/.f64 (log.f64 x) x))
0.3b
(/.f64 (log.f64 x) x)

series80.0ms (3.6%)

Counts
2 → 20
Calls

6 calls:

TimeVariablePointExpression
62.0ms
x
@-inf
(log.f64 (/.f64 (log.f64 x) x))
9.0ms
x
@0
(log.f64 (/.f64 (log.f64 x) x))
7.0ms
x
@inf
(log.f64 (/.f64 (log.f64 x) x))
1.0ms
x
@0
(/.f64 (log.f64 x) x)
1.0ms
x
@-inf
(/.f64 (log.f64 x) x)

rewrite43.0ms (1.9%)

Algorithm
batch-egg-rewrite
Rules
512×pow1_binary64
491×add-sqr-sqrt_binary64
474×add-log-exp_binary64
473×log1p-expm1-u_binary64
473×expm1-log1p-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify60.0ms (2.7%)

Algorithm
egg-herbie
Rules
1149×fma-neg_binary64
715×div-sub_binary64
504×distribute-rgt-in_binary64
372×associate-/l*_binary64
364×distribute-lft-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
024224
156168
2119168
3285168
4696168
52144168
64071168
75648168
86239168
96643168
107219168
Stop Event
node limit
Counts
79 → 65
Calls
Call 1
Inputs
(*.f64 -1 (/.f64 (log.f64 (/.f64 1 x)) x))
(*.f64 -1 (/.f64 (log.f64 (/.f64 1 x)) x))
(*.f64 -1 (/.f64 (log.f64 (/.f64 1 x)) x))
(*.f64 -1 (/.f64 (log.f64 (/.f64 1 x)) x))
(/.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) x)
(/.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) x)
(/.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) x)
(/.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) x)
(+.f64 (log.f64 (log.f64 x)) (*.f64 -1 (log.f64 x)))
(+.f64 (log.f64 (log.f64 x)) (*.f64 -1 (log.f64 x)))
(+.f64 (log.f64 (log.f64 x)) (*.f64 -1 (log.f64 x)))
(+.f64 (log.f64 (log.f64 x)) (*.f64 -1 (log.f64 x)))
(+.f64 (log.f64 (/.f64 1 x)) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (log.f64 (/.f64 1 x)) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (log.f64 (/.f64 1 x)) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (log.f64 (/.f64 1 x)) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (log.f64 (*.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))) (log.f64 (/.f64 -1 x)))
(+.f64 (log.f64 (*.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))) (log.f64 (/.f64 -1 x)))
(+.f64 (log.f64 (*.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))) (log.f64 (/.f64 -1 x)))
(+.f64 (log.f64 (*.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))) (log.f64 (/.f64 -1 x)))
Outputs
(*.f64 -1 (/.f64 (log.f64 (/.f64 1 x)) x))
(/.f64 (neg.f64 (neg.f64 (log.f64 x))) x)
(/.f64 (log.f64 x) x)
(*.f64 -1 (/.f64 (log.f64 (/.f64 1 x)) x))
(/.f64 (neg.f64 (neg.f64 (log.f64 x))) x)
(/.f64 (log.f64 x) x)
(*.f64 -1 (/.f64 (log.f64 (/.f64 1 x)) x))
(/.f64 (neg.f64 (neg.f64 (log.f64 x))) x)
(/.f64 (log.f64 x) x)
(*.f64 -1 (/.f64 (log.f64 (/.f64 1 x)) x))
(/.f64 (neg.f64 (neg.f64 (log.f64 x))) x)
(/.f64 (log.f64 x) x)
(/.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) x)
(/.f64 (neg.f64 (neg.f64 (log.f64 x))) x)
(/.f64 (log.f64 x) x)
(/.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) x)
(/.f64 (neg.f64 (neg.f64 (log.f64 x))) x)
(/.f64 (log.f64 x) x)
(/.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) x)
(/.f64 (neg.f64 (neg.f64 (log.f64 x))) x)
(/.f64 (log.f64 x) x)
(/.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)) x)
(/.f64 (neg.f64 (neg.f64 (log.f64 x))) x)
(/.f64 (log.f64 x) x)
(+.f64 (log.f64 (log.f64 x)) (*.f64 -1 (log.f64 x)))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (log.f64 x)) (*.f64 -1 (log.f64 x)))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (log.f64 x)) (*.f64 -1 (log.f64 x)))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (log.f64 x)) (*.f64 -1 (log.f64 x)))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (/.f64 1 x)) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (/.f64 1 x)) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (/.f64 1 x)) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (/.f64 1 x)) (log.f64 (*.f64 -1 (log.f64 (/.f64 1 x)))))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))) (log.f64 (/.f64 -1 x)))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))) (log.f64 (/.f64 -1 x)))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))) (log.f64 (/.f64 -1 x)))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1)))) (log.f64 (/.f64 -1 x)))
(+.f64 (neg.f64 (log.f64 x)) (log.f64 (log.f64 x)))
(-.f64 (log.f64 (log.f64 x)) (log.f64 x))

prune90.0ms (4%)

Pruning

1 alts after pruning (0 fresh and 1 done)

PrunedKeptTotal
New65065
Fresh000
Picked011
Done000
Total65166
Error
0b
Counts
66 → 1
Alt Table
StatusErrorProgram
0b
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
Compiler

Compiled 740 to 350 computations (52.7% saved)

regimes15.0ms (0.7%)

Accuracy

Total -1.6b remaining (-∞%)

Threshold costs -1.6b (-∞%)

Counts
4 → 1
Calls
Call 1
Inputs
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
(log.f64 (/.f64 x (log.f64 x)))
(*.f64 (-.f64 (pow.f64 (log.f64 x) 3) (pow.f64 (log.f64 (log.f64 x)) 3)) (/.f64 1 (+.f64 (pow.f64 (log.f64 x) 2) (*.f64 (log.f64 (log.f64 x)) (log.f64 (*.f64 x (log.f64 x)))))))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Outputs
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
Results
6.0ms0bx
4.0ms0b(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
4.0ms0b(log.f64 x)
Compiler

Compiled 57 to 30 computations (47.4% saved)

simplify2.0ms (0.1%)

Algorithm
egg-herbie
Rules
+-commutative_binary64
*-commutative_binary64
sub-neg_binary64
neg-sub0_binary64
neg-mul-1_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0610
11010
21210
31310
Stop Event
saturated
Calls
Call 1
Inputs
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
Outputs
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))

end13.0ms (0.6%)

Stop Event
done
Compiler

Compiled 14 to 10 computations (28.6% saved)

Profiling

Loading profile data...