Details

Time bar (total: 3.6s)

analyze3.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)

sample1.6s (45%)

Results
1.6s8256×body256valid
2.0ms15×body256invalid

preprocess241.0ms (6.6%)

Algorithm
egg-herbie
Rules
1883×fma-neg_binary64
922×unsub-neg_binary64
680×fma-def_binary64
602×associate-+l+_binary64
369×associate-+r+_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0510
1710
21210
31910
42810
54510
68310
712510
820110
939510
1083010
11219810
12426810
13475810
14493210
15498710
16499710
17499710
18610910
19611710
20616910
21616910
22738210
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 8 to 5 computations (37.5% saved)

simplify239.0ms (6.6%)

Algorithm
egg-herbie
Rules
1883×fma-neg_binary64
922×unsub-neg_binary64
680×fma-def_binary64
602×associate-+l+_binary64
369×associate-+r+_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0510
1710
21210
31910
42810
54510
68310
712510
820110
939510
1083010
11219810
12426810
13475810
14493210
15498710
16499710
17499710
18610910
19611710
20616910
21616910
22738210
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)))

eval1.0ms (0%)

Compiler

Compiled 7 to 4 computations (42.9% saved)

prune1.0ms (0%)

Pruning

2 alts after pruning (2 fresh and 0 done)

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

Compiled 7 to 4 computations (42.9% saved)

localize15.0ms (0.4%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(log.f64 (log.f64 x))
0.3b
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Compiler

Compiled 13 to 4 computations (69.2% saved)

series170.0ms (4.7%)

Counts
2 → 16
Calls

6 calls:

TimeVariablePointExpression
69.0ms
x
@-inf
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
66.0ms
x
@0
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
34.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))

rewrite61.0ms (1.7%)

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
2149013
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 expm1.f64 (log1p.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 exp.f64 (log.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 expm1.f64 (log1p.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 exp.f64 (log.f64 (log.f64 (log.f64 x))))))))

simplify231.0ms (6.3%)

Algorithm
egg-herbie
Rules
2842×fma-neg_binary64
987×fma-def_binary64
843×distribute-rgt-in_binary64
686×unsub-neg_binary64
584×distribute-lft-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
016216
138120
273120
3189120
4618120
51534120
62765120
74473120
85079120
95231120
105269120
115273120
125273120
135457120
147048120
157426120
167526120
177574120
187606120
197606120
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))

eval14.0ms (0.4%)

Compiler

Compiled 738 to 276 computations (62.6% saved)

prune9.0ms (0.2%)

Pruning

3 alts after pruning (2 fresh and 1 done)

PrunedKeptTotal
New57259
Fresh000
Picked011
Done000
Total57360
Error
0b
Counts
60 → 3
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(log.f64 (/.f64 x (log.f64 x)))
1.6b
(pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 1/3)
0.3b
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Compiler

Compiled 23 to 16 computations (30.4% saved)

localize8.0ms (0.2%)

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))
Compiler

Compiled 13 to 4 computations (69.2% saved)

series69.0ms (1.9%)

Counts
2 → 20
Calls

6 calls:

TimeVariablePointExpression
19.0ms
x
@inf
(log.f64 (/.f64 x (log.f64 x)))
18.0ms
x
@0
(log.f64 (/.f64 x (log.f64 x)))
16.0ms
x
@-inf
(log.f64 (/.f64 x (log.f64 x)))
8.0ms
x
@inf
(/.f64 x (log.f64 x))
7.0ms
x
@-inf
(/.f64 x (log.f64 x))

rewrite84.0ms (2.3%)

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 expm1.f64 (log1p.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 exp.f64 (log.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 expm1.f64 (log1p.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 exp.f64 (log.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))))))))

simplify128.0ms (3.5%)

Algorithm
egg-herbie
Rules
892×div-sub_binary64
472×distribute-rgt-in_binary64
441×sub-neg_binary64
362×distribute-lft-in_binary64
351×times-frac_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
025224
153200
292192
3243168
4632168
51489168
63751168
75397168
86565168
97368168
107796168
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)))

localize29.0ms (0.8%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.0b
(log.f64 (/.f64 x (log.f64 x)))
0.3b
(/.f64 x (log.f64 x))
0.8b
(pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3)
1.5b
(pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 1/3)
Compiler

Compiled 31 to 12 computations (61.3% saved)

series17.0ms (0.5%)

Counts
2 → 24
Calls

6 calls:

TimeVariablePointExpression
10.0ms
x
@0
(pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 1/3)
3.0ms
x
@inf
(pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 1/3)
3.0ms
x
@-inf
(pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 1/3)
0.0ms
x
@-inf
(pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3)
0.0ms
x
@inf
(pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3)

rewrite80.0ms (2.2%)

Algorithm
batch-egg-rewrite
Rules
763×pow1_binary64
720×add-log-exp_binary64
720×log1p-expm1-u_binary64
720×expm1-log1p-u_binary64
704×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0919
119819
2202019
Stop Event
node limit
Counts
2 → 48
Calls
Call 1
Inputs
(pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 1/3)
(pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3)
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 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 (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))) (pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2) 1/3))))) (#(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 (pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2) 1/3) (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (log.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3/2) 1/3) (pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3/2) 1/3))))) (#(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 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 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 expm1.f64 (log1p.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 exp.f64 (log.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 (cbrt.f64 (pow.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 (+.f64 1 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (log.f64 (/.f64 x (log.f64 x))) (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2) (log.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))) 2) (*.f64 (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))) (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (log.f64 (/.f64 x (log.f64 x)))) (*.f64 (sqrt.f64 (log.f64 (/.f64 x (log.f64 x)))) (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3/2) (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (log.f64 (/.f64 x (log.f64 x)))) 2) 3) (log.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (log.f64 (/.f64 x (log.f64 x)))) 3) (pow.f64 (sqrt.f64 (log.f64 (/.f64 x (log.f64 x)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2) 1) (log.f64 (/.f64 x (log.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2) (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 (*.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 2) (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 sqrt.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 6))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 3 (log.f64 (log.f64 (/.f64 x (log.f64 x))))))))))

simplify58.0ms (1.6%)

Algorithm
egg-herbie
Rules
511×distribute-rgt-neg-out_binary64
499×unsub-neg_binary64
413×neg-sub0_binary64
368×distribute-neg-out_binary64
351×distribute-rgt-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
026324
168276
2162276
3725276
43205276
56727276
Stop Event
node limit
Counts
72 → 55
Calls
Call 1
Inputs
(+.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)))))
(pow.f64 (+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x)) 3)
(pow.f64 (+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x)) 3)
(pow.f64 (+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x)) 3)
(pow.f64 (+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x)) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x))))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x))))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x))))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x))))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))) 3)
Outputs
(+.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)))
(pow.f64 (+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x)) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x)) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x)) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (log.f64 (/.f64 1 (log.f64 x))) (log.f64 x)) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x))))) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x))))) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x))))) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 x))) (log.f64 (/.f64 -1 (log.f64 (/.f64 1 x))))) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)
(pow.f64 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (/.f64 -1 (+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 -1))))) 3)
(pow.f64 (+.f64 (log.f64 x) (neg.f64 (log.f64 (log.f64 x)))) 3)
(pow.f64 (-.f64 (log.f64 x) (log.f64 (log.f64 x))) 3)

eval73.0ms (2%)

Compiler

Compiled 2395 to 1066 computations (55.5% saved)

prune52.0ms (1.4%)

Pruning

3 alts after pruning (1 fresh and 2 done)

PrunedKeptTotal
New1901191
Fresh000
Picked101
Done022
Total1913194
Error
0b
Counts
194 → 3
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
0.0b
(log.f64 (/.f64 x (log.f64 x)))
0.3b
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Compiler

Compiled 20 to 13 computations (35% saved)

localize21.0ms (0.6%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(log.f64 (/.f64 (log.f64 x) x))
0.2b
(/.f64 (log.f64 x) x)
Compiler

Compiled 19 to 5 computations (73.7% saved)

series119.0ms (3.3%)

Counts
2 → 20
Calls

6 calls:

TimeVariablePointExpression
79.0ms
x
@-inf
(log.f64 (/.f64 (log.f64 x) x))
19.0ms
x
@inf
(log.f64 (/.f64 (log.f64 x) x))
18.0ms
x
@0
(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)

rewrite76.0ms (2.1%)

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 expm1.f64 (log1p.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 exp.f64 (log.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 expm1.f64 (log1p.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 exp.f64 (log.f64 (log.f64 (/.f64 (log.f64 x) x))))))))

simplify124.0ms (3.4%)

Algorithm
egg-herbie
Rules
1145×fma-neg_binary64
706×div-sub_binary64
544×distribute-rgt-in_binary64
400×distribute-lft-in_binary64
370×distribute-neg-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
024224
156168
2119168
3285168
4695168
52204168
64430168
76006168
86597168
97001168
107573168
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))

eval26.0ms (0.7%)

Compiler

Compiled 733 to 345 computations (52.9% saved)

prune11.0ms (0.3%)

Pruning

3 alts after pruning (0 fresh and 3 done)

PrunedKeptTotal
New65065
Fresh000
Picked011
Done022
Total65368
Error
0b
Counts
68 → 3
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
0.0b
(log.f64 (/.f64 x (log.f64 x)))
0.3b
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
Compiler

Compiled 20 to 13 computations (35% saved)

regimes15.0ms (0.4%)

Accuracy

Total -1.6b remaining (-20109.9%)

Threshold costs -1.6b (-20109.9%)

Counts
4 → 1
Calls
Call 1
Inputs
(log.f64 (/.f64 x (log.f64 x)))
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
(pow.f64 (pow.f64 (log.f64 (/.f64 x (log.f64 x))) 3) 1/3)
Outputs
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
Calls

3 calls:

5.0ms
x
4.0ms
(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
4.0ms
(log.f64 x)
Results
ErrorSegmentsBranch
0.0b1x
0.0b1(-.f64 (log.f64 x) (log.f64 (log.f64 x)))
0.0b1(log.f64 x)
Compiler

Compiled 39 to 20 computations (48.7% saved)

simplify4.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
0818
11218
21418
31518
Stop Event
done
saturated
Calls
Call 1
Inputs
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
(log.f64 (/.f64 x (log.f64 x)))
Outputs
(neg.f64 (log.f64 (/.f64 (log.f64 x) x)))
(log.f64 (/.f64 x (log.f64 x)))
Compiler

Compiled 13 to 9 computations (30.8% saved)

soundness0.0ms (0%)

end27.0ms (0.7%)

Compiler

Compiled 12 to 7 computations (41.7% saved)

Profiling

Loading profile data...