Details

Time bar (total: 6.3s)

analyze416.0ms (6.6%)

Algorithm
search
Search
TrueOtherFalseIter
0%99.9%0.1%0
0%99.9%0.1%1
0%99.9%0.1%2
0%99.9%0.1%3
0%99.9%0.1%4
0%99.9%0.1%5
0%99.9%0.1%6
12.5%87.4%0.1%7
18.7%81.1%0.1%8
28.1%71.8%0.1%9
34.3%56.9%8.7%10
40.6%49.9%9.5%11
48%41.9%10.1%12
Compiler

Compiled 11 to 8 computations (27.3% saved)

sample2.0s (31.9%)

Results
1.8s8255×body256valid
183.0ms1109×body256invalid
4.0msbody1024valid

preprocess46.0ms (0.7%)

Algorithm
egg-herbie
Rules
522×fma-def_binary64
97×distribute-rgt-in_binary64
78×associate-+l+_binary64
66×associate-+r+_binary64
61×distribute-lft-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01640
15340
213740
333640
470640
5109040
6115640
7116240
033
133
Stop Event
unsound
saturated
Calls
Call 1
Inputs
0
1
2
Outputs
0
1
0
2
Call 2
Inputs
(*.f64 (+.f64 x y) (+.f64 z 1))
(*.f64 (+.f64 y x) (+.f64 z 1))
(*.f64 (+.f64 z y) (+.f64 x 1))
(*.f64 (+.f64 x z) (+.f64 y 1))
Outputs
(*.f64 (+.f64 x y) (+.f64 z 1))
(*.f64 (+.f64 z 1) (+.f64 x y))
(*.f64 (+.f64 y x) (+.f64 z 1))
(*.f64 (+.f64 z 1) (+.f64 x y))
(*.f64 (+.f64 z y) (+.f64 x 1))
(*.f64 (+.f64 y z) (+.f64 x 1))
(*.f64 (+.f64 x z) (+.f64 y 1))
Symmetry

(sort x y)

Compiler

Compiled 13 to 10 computations (23.1% saved)

simplify23.0ms (0.4%)

Algorithm
egg-herbie
Rules
186×fma-def_binary64
32×distribute-rgt-in_binary64
26×associate-+l+_binary64
22×associate-+r+_binary64
20×distribute-lft-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0810
11910
25110
312010
424610
538610
640810
741010
Stop Event
saturated
Counts
1 → 1
Calls
Call 1
Inputs
(*.f64 (+.f64 x y) (+.f64 z 1))
Outputs
(*.f64 (+.f64 x y) (+.f64 z 1))

eval1.0ms (0%)

Compiler

Compiled 10 to 7 computations (30% saved)

prune4.0ms (0.1%)

Pruning

2 alts after pruning (2 fresh and 0 done)

PrunedKeptTotal
New011
Fresh011
Picked000
Done000
Total022
Error
0.0b
Counts
2 → 1
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(*.f64 (+.f64 x y) (+.f64 z 1))
Compiler

Compiled 10 to 7 computations (30% saved)

localize17.0ms (0.3%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (+.f64 x y) (+.f64 z 1))
Compiler

Compiled 20 to 10 computations (50% saved)

series8.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

TimeVariablePointExpression
1.0ms
z
@0
(*.f64 (+.f64 x y) (+.f64 z 1))
1.0ms
x
@inf
(*.f64 (+.f64 x y) (+.f64 z 1))
1.0ms
x
@0
(*.f64 (+.f64 x y) (+.f64 z 1))
1.0ms
z
@-inf
(*.f64 (+.f64 x y) (+.f64 z 1))
1.0ms
y
@inf
(*.f64 (+.f64 x y) (+.f64 z 1))

rewrite74.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
676×prod-diff_binary64
600×unpow-prod-down_binary64
408×log-prod_binary64
324×fma-def_binary64
231×pow2_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0810
117610
2254610
Stop Event
node limit
Counts
1 → 76
Calls
Call 1
Inputs
(*.f64 (+.f64 x y) (+.f64 z 1))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (+.f64 x y) (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (+.f64 x y) (+.f64 z 1)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (+.f64 x y) z) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 (+.f64 x y) z) 1) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 x (+.f64 z 1)) (*.f64 y (+.f64 z 1)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (+.f64 z 1)) (*.f64 x (+.f64 z 1)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (+.f64 z 1) x) (*.f64 (+.f64 z 1) y))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (+.f64 z 1) y) (*.f64 (+.f64 z 1) x))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (fma.f64 (+.f64 x y) z x) y)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (fma.f64 (+.f64 x y) z y) x)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 (+.f64 x y)) (+.f64 z 1))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 (+.f64 x y)) (+.f64 z 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (+.f64 x y)) (+.f64 z 1)))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (+.f64 x y)) (+.f64 z 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 (+.f64 x y) (+.f64 z 1)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 (pow.f64 x 3) (pow.f64 y 3)) (+.f64 1 (pow.f64 z 3))) (*.f64 (fma.f64 y (-.f64 y x) (*.f64 x x)) (-.f64 (fma.f64 z z 1) z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (*.f64 (+.f64 x y) (-.f64 x y)) (+.f64 1 (pow.f64 z 3))) (*.f64 (-.f64 x y) (-.f64 (fma.f64 z z 1) z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 (pow.f64 x 3) (pow.f64 y 3)) (fma.f64 z z -1)) (*.f64 (fma.f64 y (-.f64 y x) (*.f64 x x)) (-.f64 z 1)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (*.f64 (+.f64 x y) (-.f64 x y)) (fma.f64 z z -1)) (*.f64 (-.f64 x y) (-.f64 z 1)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 (pow.f64 z 3)) (+.f64 (pow.f64 x 3) (pow.f64 y 3))) (*.f64 (-.f64 (fma.f64 z z 1) z) (fma.f64 y (-.f64 y x) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 z z -1) (+.f64 (pow.f64 x 3) (pow.f64 y 3))) (*.f64 (-.f64 z 1) (fma.f64 y (-.f64 y x) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 (pow.f64 z 3)) (*.f64 (+.f64 x y) (-.f64 x y))) (*.f64 (-.f64 (fma.f64 z z 1) z) (-.f64 x y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 z z -1) (*.f64 (+.f64 x y) (-.f64 x y))) (*.f64 (-.f64 z 1) (-.f64 x y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 (+.f64 x y) z) 3) (pow.f64 (+.f64 x y) 3)) (+.f64 (pow.f64 (*.f64 (+.f64 x y) z) 2) (-.f64 (pow.f64 (+.f64 x y) 2) (*.f64 (*.f64 (+.f64 x y) z) (+.f64 x y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 (+.f64 x y) z) 2) (pow.f64 (+.f64 x y) 2)) (-.f64 (*.f64 (+.f64 x y) z) (+.f64 x y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 (pow.f64 x 3) (pow.f64 y 3)) (+.f64 z 1)) (fma.f64 y (-.f64 y x) (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (*.f64 (+.f64 x y) (-.f64 x y)) (+.f64 z 1)) (-.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 (pow.f64 z 3)) (+.f64 x y)) (-.f64 (fma.f64 z z 1) z))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 z z -1) (+.f64 x y)) (-.f64 z 1))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x y) (+.f64 1 (pow.f64 z 3))) (-.f64 (fma.f64 z z 1) z))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x y) (fma.f64 z z -1)) (-.f64 z 1))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 z 1) (+.f64 (pow.f64 x 3) (pow.f64 y 3))) (fma.f64 y (-.f64 y x) (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 z 1) (*.f64 (+.f64 x y) (-.f64 x y))) (-.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (+.f64 x y) (+.f64 z 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (+.f64 x y) (+.f64 z 1)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (+.f64 x y) (+.f64 z 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (+.f64 x y) (+.f64 z 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (+.f64 x y) (+.f64 z 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (+.f64 x y) (+.f64 z 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (+.f64 x y)) (+.f64 z 1)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 (+.f64 x y) (+.f64 z 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (+.f64 x y)) (exp.f64 (*.f64 (+.f64 x y) z))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (+.f64 x y))) (exp.f64 (*.f64 (+.f64 x y) z))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (*.f64 (+.f64 x y) z)) (+.f64 1 (expm1.f64 (+.f64 x y)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (+.f64 x y) (+.f64 z 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (+.f64 x y) (+.f64 z 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (+.f64 x y) (+.f64 z 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (log1p.f64 z) (log.f64 (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (+.f64 (log1p.f64 z) (log.f64 (+.f64 x y))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x (+.f64 z 1) (*.f64 y (+.f64 z 1)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y (+.f64 z 1) (*.f64 x (+.f64 z 1)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 x y) z (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 x y) 1 (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 z (+.f64 x y) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (+.f64 x y) (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 (+.f64 x y) z) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 z 1) y (*.f64 (+.f64 z 1) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (+.f64 x y)) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (+.f64 x y)) (pow.f64 (cbrt.f64 (+.f64 x y)) 2) (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 x y)) 2) (cbrt.f64 (+.f64 x y)) (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 x y)) 2) (*.f64 (cbrt.f64 (+.f64 x y)) 1) (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 x y)) 2) (*.f64 (cbrt.f64 (+.f64 x y)) z) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 z) (*.f64 (sqrt.f64 z) (+.f64 x y)) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 x y)) (sqrt.f64 (+.f64 x y)) (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 x y)) (*.f64 (sqrt.f64 (+.f64 x y)) 1) (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 x y)) (*.f64 (sqrt.f64 (+.f64 x y)) z) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 (pow.f64 x 3) (pow.f64 y 3)) (/.f64 1 (fma.f64 y (-.f64 y x) (*.f64 x x))) (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (+.f64 x y) (-.f64 x y)) (/.f64 1 (-.f64 x y)) (*.f64 (+.f64 x y) z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (+.f64 x y) z) 1 (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 (+.f64 x y) z)) 2) (cbrt.f64 (*.f64 (+.f64 x y) z)) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 (+.f64 x y) z)) (sqrt.f64 (*.f64 (+.f64 x y) z)) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (sqrt.f64 z) (sqrt.f64 (+.f64 x y))) (*.f64 (sqrt.f64 z) (sqrt.f64 (+.f64 x y))) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (sqrt.f64 (+.f64 x y)) (sqrt.f64 z)) (*.f64 (sqrt.f64 (+.f64 x y)) (sqrt.f64 z)) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (pow.f64 (cbrt.f64 (+.f64 x y)) 2)) (cbrt.f64 (+.f64 x y)) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (sqrt.f64 (+.f64 x y))) (sqrt.f64 (+.f64 x y)) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (+.f64 x y) (pow.f64 (cbrt.f64 z) 2)) (cbrt.f64 z) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (+.f64 x y) (sqrt.f64 z)) (sqrt.f64 z) (+.f64 x y))))))

simplify79.0ms (1.3%)

Algorithm
egg-herbie
Rules
176×fma-def_binary64
37×associate-+l+_binary64
25×associate-+r+_binary64
20×distribute-rgt-in_binary64
15×distribute-rgt-out_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
013438
133330
271318
3164318
4279318
5325318
6359318
7365318
Stop Event
saturated
Counts
112 → 86
Calls
Call 1
Inputs
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y x)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(*.f64 (+.f64 y x) z)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(*.f64 (+.f64 y x) z)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
Outputs
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(*.f64 (+.f64 1 z) x)
(fma.f64 z x x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(*.f64 (+.f64 1 z) x)
(fma.f64 z x x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(*.f64 (+.f64 1 z) x)
(fma.f64 z x x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 y x)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(*.f64 (+.f64 y x) z)
(*.f64 z (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(*.f64 (+.f64 y x) z)
(*.f64 z (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 (+.f64 1 z) x (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) (+.f64 y x))

eval33.0ms (0.5%)

Compiler

Compiled 1162 to 452 computations (61.1% saved)

prune57.0ms (0.9%)

Pruning

8 alts after pruning (7 fresh and 1 done)

PrunedKeptTotal
New79786
Fresh000
Picked011
Done000
Total79887
Error
0b
Counts
87 → 8
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))
31.1b
(*.f64 (+.f64 1 z) x)
0.0b
(*.f64 (+.f64 x y) (+.f64 z 1))
0.0b
(+.f64 (+.f64 x y) (*.f64 (+.f64 x y) z))
40.2b
(*.f64 (+.f64 y x) z)
22.5b
(+.f64 y x)
0.0b
(+.f64 (*.f64 (+.f64 z 1) y) (*.f64 (+.f64 z 1) x))
32.5b
(*.f64 y (+.f64 1 z))
Compiler

Compiled 148 to 99 computations (33.1% saved)

localize16.0ms (0.3%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(+.f64 (+.f64 x y) (*.f64 (+.f64 x y) z))
0.0b
(*.f64 (+.f64 x y) z)
Compiler

Compiled 23 to 6 computations (73.9% saved)

series14.0ms (0.2%)

Counts
2 → 72
Calls

18 calls:

TimeVariablePointExpression
2.0ms
z
@inf
(*.f64 (+.f64 x y) z)
1.0ms
y
@0
(+.f64 (+.f64 x y) (*.f64 (+.f64 x y) z))
1.0ms
z
@inf
(+.f64 (+.f64 x y) (*.f64 (+.f64 x y) z))
1.0ms
x
@0
(*.f64 (+.f64 x y) z)
1.0ms
z
@0
(*.f64 (+.f64 x y) z)

rewrite105.0ms (1.7%)

Algorithm
batch-egg-rewrite
Rules
493×fma-def_binary64
412×log-prod_binary64
403×prod-exp_binary64
339×pow-prod-down_binary64
300×exp-prod_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify103.0ms (1.6%)

Algorithm
egg-herbie
Rules
740×fma-def_binary64
623×fma-neg_binary64
153×distribute-rgt-in_binary64
101×distribute-lft-in_binary64
97×unsub-neg_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
032638
194579
2211552
3502552
41071552
52010552
62792552
72883552
82883552
Stop Event
saturated
Counts
207 → 155
Calls
Call 1
Inputs
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(*.f64 (+.f64 1 z) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 z) 1) x))
(+.f64 (*.f64 y z) (+.f64 y (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 z) 1) x))))
(+.f64 (*.f64 y z) (+.f64 y (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 z) 1) x))))
(+.f64 (*.f64 y z) (+.f64 y (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 z) 1) x))))
(+.f64 (*.f64 z x) x)
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
(+.f64 (*.f64 z x) (+.f64 x (*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))))
(+.f64 (*.f64 z x) (+.f64 x (*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))))
(+.f64 (*.f64 z x) (+.f64 x (*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))))
(+.f64 y x)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(*.f64 (+.f64 y x) z)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(*.f64 (+.f64 y x) z)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
Outputs
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(*.f64 (+.f64 1 z) x)
(fma.f64 z x x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 y z) (+.f64 (*.f64 (+.f64 1 z) x) y))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 z) 1) x))
(fma.f64 z x x)
(+.f64 (*.f64 y z) (+.f64 y (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 z) 1) x))))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 y z) (+.f64 y (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 z) 1) x))))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 y z) (+.f64 y (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 z) 1) x))))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 z x) x)
(fma.f64 z x x)
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 z x) (+.f64 (*.f64 y (+.f64 1 z)) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
(fma.f64 y z y)
(+.f64 (*.f64 z x) (+.f64 x (*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 z x) (+.f64 x (*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 (*.f64 z x) (+.f64 x (*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 y x)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(*.f64 (+.f64 y x) z)
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(fma.f64 y z (+.f64 y (fma.f64 z x x)))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) (+.f64 z 1))

localize11.0ms (0.2%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize13.0ms (0.2%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 y (+.f64 1 z))
Compiler

Compiled 14 to 9 computations (35.7% saved)

series6.0ms (0.1%)

Counts
1 → 12
Calls

6 calls:

TimeVariablePointExpression
2.0ms
z
@inf
(*.f64 y (+.f64 1 z))
1.0ms
y
@0
(*.f64 y (+.f64 1 z))
1.0ms
y
@inf
(*.f64 y (+.f64 1 z))
1.0ms
z
@-inf
(*.f64 y (+.f64 1 z))
1.0ms
y
@-inf
(*.f64 y (+.f64 1 z))

rewrite50.0ms (0.8%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
067
11267
216667
Stop Event
node limit
Counts
1 → 26
Calls
Call 1
Inputs
(*.f64 y (+.f64 1 z))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 y (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 y (*.f64 (*.f64 y z) 1))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y z) y)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (+.f64 y (*.f64 y z))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 y 3) (pow.f64 (*.f64 y z) 3)) (+.f64 (*.f64 y y) (-.f64 (*.f64 (*.f64 y z) (*.f64 y z)) (*.f64 y (*.f64 y z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 y y) (*.f64 (*.f64 y z) (*.f64 y z))) (-.f64 y (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 (pow.f64 z 3)) y) (+.f64 1 (fma.f64 z z (neg.f64 z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 1 (*.f64 z z)) y) (-.f64 1 z))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (+.f64 1 (pow.f64 z 3))) (+.f64 1 (fma.f64 z z (neg.f64 z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (-.f64 1 (*.f64 z z))) (-.f64 1 z))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 y (*.f64 y z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 y (*.f64 y z)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 y (*.f64 y z))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 y (*.f64 y z))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 y (*.f64 y z)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 y) (+.f64 1 z)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 y (*.f64 y z)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 y 3) (pow.f64 (+.f64 1 z) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (+.f64 1 z) 3) (pow.f64 y 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 y (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 y (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (log1p.f64 z) (log.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y 1 (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 y (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 y) 2) (cbrt.f64 y) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 y) (sqrt.f64 y) (*.f64 y z))))))

simplify11.0ms (0.2%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
0554
1854
21254
31654
42254
52854
64154
74554
84754
Stop Event
saturated
Counts
38 → 29
Calls
Call 1
Inputs
y
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(*.f64 y z)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(*.f64 y z)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
Outputs
y
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(*.f64 y z)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(*.f64 y z)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)

localize7.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (+.f64 1 z) x)
Compiler

Compiled 14 to 9 computations (35.7% saved)

series3.0ms (0%)

Counts
1 → 12
Calls

6 calls:

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

rewrite48.0ms (0.8%)

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

Useful iterations: 0 (0.0ms)

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

simplify11.0ms (0.2%)

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

Useful iterations: 0 (0.0ms)

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

localize6.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (+.f64 y x) z)
Compiler

Compiled 14 to 5 computations (64.3% saved)

series3.0ms (0%)

Counts
1 → 24
Calls

9 calls:

TimeVariablePointExpression
0.0ms
y
@inf
(*.f64 (+.f64 y x) z)
0.0ms
y
@0
(*.f64 (+.f64 y x) z)
0.0ms
x
@-inf
(*.f64 (+.f64 y x) z)
0.0ms
x
@inf
(*.f64 (+.f64 y x) z)
0.0ms
y
@-inf
(*.f64 (+.f64 y x) z)

rewrite49.0ms (0.8%)

Algorithm
batch-egg-rewrite
Rules
715×pow1_binary64
663×add-log-exp_binary64
663×log1p-expm1-u_binary64
663×expm1-log1p-u_binary64
648×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
067
11287
217767
Stop Event
node limit
Counts
1 → 21
Calls
Call 1
Inputs
(*.f64 (+.f64 y x) z)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y z) (*.f64 x z))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 x z) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 z y) (*.f64 z x))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 z x) (*.f64 z y))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (+.f64 y x) z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 (pow.f64 y 3) (pow.f64 x 3)) z) (fma.f64 y y (*.f64 x (-.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 (*.f64 y y) (*.f64 x x)) z) (-.f64 y x))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 z (+.f64 (pow.f64 y 3) (pow.f64 x 3))) (fma.f64 y y (*.f64 x (-.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 z (-.f64 (*.f64 y y) (*.f64 x x))) (-.f64 y x))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (+.f64 y x) z) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (+.f64 y x) z) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (+.f64 y x) z)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (+.f64 y x) z)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (+.f64 y x) z) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 z) (+.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (+.f64 y x) z) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (+.f64 y x) 3) (pow.f64 z 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 z 3) (pow.f64 (+.f64 y x) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (+.f64 y x) z)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (+.f64 y x) z)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (+.f64 y x) z)))))))

simplify11.0ms (0.2%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
fma-def_binary64
+-commutative_binary64
distribute-rgt-out_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
07168
111150
218150
320150
Stop Event
saturated
Counts
45 → 26
Calls
Call 1
Inputs
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
Outputs
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(*.f64 y z)
(*.f64 z y)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(*.f64 y z)
(*.f64 z y)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(*.f64 y z)
(*.f64 z y)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))
(+.f64 (*.f64 y z) (*.f64 z x))
(fma.f64 y z (*.f64 z x))
(*.f64 z (+.f64 x y))

eval75.0ms (1.2%)

Compiler

Compiled 2806 to 979 computations (65.1% saved)

prune48.0ms (0.8%)

Pruning

11 alts after pruning (7 fresh and 4 done)

PrunedKeptTotal
New2276233
Fresh112
Picked011
Done235
Total23011241
Error
0b
Counts
241 → 11
Alt Table
Click to see full alt table
StatusErrorProgram
43.3b
x
40.2b
(*.f64 (+.f64 y x) z)
40.2b
(+.f64 (*.f64 z y) (*.f64 z x))
22.5b
(+.f64 y x)
0.0b
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))
31.1b
(*.f64 (+.f64 1 z) x)
0.0b
(*.f64 (+.f64 x y) (+.f64 z 1))
32.5b
(+.f64 (*.f64 y z) y)
42.5b
y
52.5b
(*.f64 z y)
50.3b
(*.f64 z x)
Compiler

Compiled 126 to 84 computations (33.3% saved)

localize13.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))
0.0b
(*.f64 (+.f64 z 1) y)
Compiler

Compiled 25 to 15 computations (40% saved)

series7.0ms (0.1%)

Counts
2 → 60
Calls

15 calls:

TimeVariablePointExpression
1.0ms
y
@0
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))
1.0ms
x
@inf
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))
1.0ms
x
@0
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))
1.0ms
z
@-inf
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))
1.0ms
x
@-inf
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))

rewrite63.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
805×pow1_binary64
743×log1p-expm1-u_binary64
743×expm1-log1p-u_binary64
742×add-log-exp_binary64
726×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0821
116217
2202317
Stop Event
node limit
Counts
2 → 43
Calls
Call 1
Inputs
(*.f64 (+.f64 z 1) y)
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 y (*.f64 z y))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 y (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 z y) y)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y z) y)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (+.f64 y (*.f64 y z))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 (pow.f64 z 3)) y) (fma.f64 z z (-.f64 1 z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 z z -1) y) (+.f64 z -1))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (+.f64 1 (pow.f64 z 3))) (fma.f64 z z (-.f64 1 z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (fma.f64 z z -1)) (+.f64 z -1))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 y (*.f64 y z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 y (*.f64 y z)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 y (*.f64 y z))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 y (*.f64 y z))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 y (*.f64 y z)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 y) (+.f64 z 1)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 y (*.f64 y z)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (+.f64 z 1) 3) (pow.f64 y 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 y 3) (pow.f64 (+.f64 z 1) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 y (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 y (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (log1p.f64 z) (log.f64 y)))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (+.f64 y (*.f64 y z)) (*.f64 (+.f64 z 1) x))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (+.f64 z 1) x) (+.f64 y (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 (+.f64 z 1) x) 1) (+.f64 y (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (+.f64 z 1) (+.f64 x y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 (+.f64 z 1) (+.f64 x y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 z 1) (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 z 1) (+.f64 x y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 (+.f64 z 1) (+.f64 x y))) (pow.f64 (cbrt.f64 (*.f64 (+.f64 z 1) (+.f64 x y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 (+.f64 z 1) (+.f64 x y))) 2) (cbrt.f64 (*.f64 (+.f64 z 1) (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 (+.f64 z 1) (+.f64 x y))) (sqrt.f64 (*.f64 (+.f64 z 1) (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 (+.f64 z 1) x) 3) (pow.f64 (+.f64 y (*.f64 y z)) 3)) (+.f64 (*.f64 (*.f64 (+.f64 z 1) x) (*.f64 (+.f64 z 1) x)) (-.f64 (pow.f64 (+.f64 y (*.f64 y z)) 2) (*.f64 (*.f64 (+.f64 z 1) x) (+.f64 y (*.f64 y z))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 (+.f64 z 1) x) (*.f64 (+.f64 z 1) x)) (pow.f64 (+.f64 y (*.f64 y z)) 2)) (-.f64 (*.f64 (+.f64 z 1) x) (+.f64 y (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (+.f64 z 1) (+.f64 x y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (+.f64 z 1) (+.f64 x y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (+.f64 z 1) (+.f64 x y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (+.f64 z 1) (+.f64 x y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (+.f64 z 1) (+.f64 x y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 (+.f64 z 1) (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (+.f64 z 1) (+.f64 x y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (+.f64 z 1) (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (+.f64 z 1) (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (+.f64 z 1) (+.f64 x y))))))))

simplify94.0ms (1.5%)

Algorithm
egg-herbie
Rules
681×fma-def_binary64
674×fma-neg_binary64
132×distribute-rgt-in_binary64
95×associate--r+_binary64
94×cancel-sign-sub-inv_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
023465
163465
2142432
3450432
41020432
52170432
62936432
72981432
82981432
Stop Event
saturated
Counts
103 → 57
Calls
Call 1
Inputs
y
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(*.f64 y z)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(*.f64 y z)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(+.f64 (*.f64 y z) y)
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(+.f64 y x)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(*.f64 (+.f64 y x) z)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(+.f64 y (+.f64 (*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z)) x))
(+.f64 y (+.f64 (*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z)) x))
(+.f64 y (+.f64 (*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z)) x))
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 (+.f64 1 z) x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
Outputs
y
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(*.f64 y z)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(*.f64 y z)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(+.f64 (*.f64 y z) y)
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(+.f64 y x)
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 y x) z)
(*.f64 z (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 (+.f64 y x) z) x))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 z (+.f64 y x))
(+.f64 y (+.f64 (*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z)) x))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z)) x))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 y (+.f64 (*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z)) x))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 1 z) x)
(*.f64 (+.f64 z 1) x)
(fma.f64 z x x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 1 z) x)
(*.f64 (+.f64 z 1) x)
(fma.f64 z x x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 (+.f64 1 z) x)
(*.f64 (+.f64 z 1) x)
(fma.f64 z x x)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(*.f64 y (+.f64 1 z))
(fma.f64 y z y)
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))
(+.f64 (*.f64 (+.f64 1 z) x) (*.f64 y (+.f64 1 z)))
(+.f64 y (fma.f64 (+.f64 y x) z x))
(+.f64 y (fma.f64 z (+.f64 y x) x))
(*.f64 (+.f64 z 1) (+.f64 y x))

localize9.0ms (0.1%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize8.0ms (0.1%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize13.0ms (0.2%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(+.f64 (*.f64 y z) y)
Compiler

Compiled 13 to 5 computations (61.5% saved)

series8.0ms (0.1%)

Counts
1 → 15
Calls

6 calls:

TimeVariablePointExpression
3.0ms
y
@0
(+.f64 (*.f64 y z) y)
2.0ms
z
@0
(+.f64 (*.f64 y z) y)
1.0ms
y
@inf
(+.f64 (*.f64 y z) y)
1.0ms
y
@-inf
(+.f64 (*.f64 y z) y)
1.0ms
z
@-inf
(+.f64 (*.f64 y z) y)

rewrite76.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
618×pow1_binary64
575×add-log-exp_binary64
575×log1p-expm1-u_binary64
575×expm1-log1p-u_binary64
562×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify25.0ms (0.4%)

Algorithm
egg-herbie
Rules
62×fma-def_binary64
59×fma-neg_binary64
22×associate-*l*_binary64
21×unsub-neg_binary64
18×associate-*r*_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
01293
13293
26369
315969
423269
532369
638469
Stop Event
saturated
Counts
53 → 41
Calls
Call 1
Inputs
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 y (+.f64 1 z))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
y
(*.f64 y z)
(*.f64 y z)
Outputs
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 z) 1)))
(*.f64 y (+.f64 1 z))
(+.f64 y (*.f64 y z))
(fma.f64 y z y)
y
(*.f64 y z)
(*.f64 y z)

localize14.0ms (0.2%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(+.f64 (*.f64 z y) (*.f64 z x))
Compiler

Compiled 19 to 6 computations (68.4% saved)

series7.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

TimeVariablePointExpression
1.0ms
z
@0
(+.f64 (*.f64 z y) (*.f64 z x))
1.0ms
z
@-inf
(+.f64 (*.f64 z y) (*.f64 z x))
1.0ms
z
@inf
(+.f64 (*.f64 z y) (*.f64 z x))
1.0ms
x
@0
(+.f64 (*.f64 z y) (*.f64 z x))
1.0ms
x
@inf
(+.f64 (*.f64 z y) (*.f64 z x))

rewrite67.0ms (1.1%)

Algorithm
batch-egg-rewrite
Rules
836×pow1_binary64
774×add-log-exp_binary64
774×log1p-expm1-u_binary64
774×expm1-log1p-u_binary64
757×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
077
11517
221067
Stop Event
node limit
Counts
1 → 41
Calls
Call 1
Inputs
(+.f64 (*.f64 z y) (*.f64 z x))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 z (+.f64 y x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (*.f64 z y) 2) (*.f64 z (-.f64 y x))) (/.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z (-.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 z (+.f64 y x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 z (+.f64 y x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 z (+.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (+.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 z (+.f64 y x))) (pow.f64 (cbrt.f64 (*.f64 z (+.f64 y x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 z (+.f64 y x))) 2) (cbrt.f64 (*.f64 z (+.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 z) (*.f64 (sqrt.f64 z) (+.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 z (+.f64 y x))) (sqrt.f64 (*.f64 z (+.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 (*.f64 z y) 3) (pow.f64 (*.f64 z x) 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 z y) 2) (*.f64 (*.f64 z x) (-.f64 (*.f64 z x) (*.f64 z y))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (*.f64 z y) 2) (pow.f64 (*.f64 z x) 2)) (/.f64 1 (*.f64 z (-.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 y x) z)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 z y) 2) (*.f64 (*.f64 z x) (-.f64 (*.f64 z x) (*.f64 z y)))) (+.f64 (pow.f64 (*.f64 z y) 3) (pow.f64 (*.f64 z x) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (*.f64 z (-.f64 y x)) (-.f64 (pow.f64 (*.f64 z y) 2) (pow.f64 (*.f64 z x) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 z y) 3) (pow.f64 (*.f64 z x) 3)) (+.f64 (pow.f64 (*.f64 z y) 2) (*.f64 (*.f64 z x) (-.f64 (*.f64 z x) (*.f64 z y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 z y) 3) (pow.f64 (*.f64 z x) 3)) (+.f64 (pow.f64 (*.f64 z x) 2) (-.f64 (pow.f64 (*.f64 z y) 2) (*.f64 z (*.f64 y (*.f64 z x))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 z y) 2) (pow.f64 (*.f64 z x) 2)) (*.f64 z (-.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 (*.f64 z y) 3) (pow.f64 (*.f64 z x) 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 z y) 2) (*.f64 (*.f64 z x) (-.f64 (*.f64 z x) (*.f64 z y))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 z y) 2) (pow.f64 (*.f64 z x) 2))) (neg.f64 (*.f64 z (-.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 z x) 2) (pow.f64 (*.f64 z y) 2)) (-.f64 (*.f64 z x) (*.f64 z y)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 z (+.f64 y x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 z (+.f64 y x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 z (+.f64 y x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 z (+.f64 y x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 z (+.f64 y x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 z) (+.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 z (+.f64 y x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 z (+.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 z (+.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 z (+.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 z y (*.f64 z x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 z x (*.f64 z y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y z (*.f64 z x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x z (*.f64 z y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 z y) (*.f64 z x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 z x) (*.f64 z y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 z x)) 2) (cbrt.f64 (*.f64 z x)) (*.f64 z y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 z y)) 2) (cbrt.f64 (*.f64 z y)) (*.f64 z x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 z x)) (sqrt.f64 (*.f64 z x)) (*.f64 z y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 z y)) (sqrt.f64 (*.f64 z y)) (*.f64 z x))))))

simplify39.0ms (0.6%)

Algorithm
egg-herbie
Rules
90×fma-neg_binary64
85×fma-def_binary64
42×cancel-sign-sub-inv_binary64
38×distribute-rgt-in_binary64
34×distribute-lft-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
015234
134234
280234
3210234
4434234
5567234
6677234
7682234
Stop Event
saturated
Counts
77 → 46
Calls
Call 1
Inputs
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
Outputs
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 (+.f64 y x) z)
(*.f64 z x)
(*.f64 x z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 z x)
(*.f64 x z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 z x)
(*.f64 x z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)

eval58.0ms (0.9%)

Compiler

Compiled 1684 to 713 computations (57.7% saved)

prune38.0ms (0.6%)

Pruning

11 alts after pruning (3 fresh and 8 done)

PrunedKeptTotal
New1422144
Fresh112
Picked011
Done178
Total14411155
Error
0b
Counts
155 → 11
Alt Table
Click to see full alt table
StatusErrorProgram
42.5b
y
32.5b
(+.f64 (*.f64 y z) y)
43.3b
x
40.2b
(*.f64 (+.f64 y x) z)
40.2b
(+.f64 (*.f64 z y) (*.f64 z x))
22.5b
(+.f64 y x)
0.0b
(*.f64 (+.f64 x y) (+.f64 z 1))
40.2b
(fma.f64 z x (*.f64 z y))
31.1b
(*.f64 (+.f64 1 z) x)
52.5b
(*.f64 z y)
50.3b
(*.f64 z x)
Compiler

Compiled 79 to 52 computations (34.2% saved)

localize12.0ms (0.2%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(fma.f64 z x (*.f64 z y))
Compiler

Compiled 15 to 5 computations (66.7% saved)

series6.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

TimeVariablePointExpression
1.0ms
z
@-inf
(fma.f64 z x (*.f64 z y))
1.0ms
z
@inf
(fma.f64 z x (*.f64 z y))
1.0ms
x
@inf
(fma.f64 z x (*.f64 z y))
1.0ms
x
@-inf
(fma.f64 z x (*.f64 z y))
1.0ms
z
@0
(fma.f64 z x (*.f64 z y))

rewrite113.0ms (1.8%)

Algorithm
batch-egg-rewrite
Rules
575×pow1_binary64
525×add-log-exp_binary64
525×log1p-expm1-u_binary64
525×expm1-log1p-u_binary64
512×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
068
11187
214147
Stop Event
node limit
Counts
1 → 22
Calls
Call 1
Inputs
(fma.f64 z x (*.f64 z y))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 z y) (*.f64 z x))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 z x) (*.f64 z y))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 z x) 1) (*.f64 z y))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 z (+.f64 x y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 z (+.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 z (+.f64 x y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 z (+.f64 x y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 z (+.f64 x y))) (pow.f64 (cbrt.f64 (*.f64 z (+.f64 x y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 z (+.f64 x y))) 2) (cbrt.f64 (*.f64 z (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 z (+.f64 x y))) (sqrt.f64 (*.f64 z (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 (*.f64 z y) 3)) (+.f64 (*.f64 (*.f64 z x) (*.f64 z x)) (-.f64 (pow.f64 (*.f64 z y) 2) (*.f64 (*.f64 z x) (*.f64 z y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 z x) (*.f64 z x)) (pow.f64 (*.f64 z y) 2)) (-.f64 (*.f64 z x) (*.f64 z y)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 z (+.f64 x y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 z (+.f64 x y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 z (+.f64 x y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 z (+.f64 x y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 z (+.f64 x y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 z (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 z (+.f64 x y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 z (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 z (+.f64 x y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 z (+.f64 x y))))))))

simplify47.0ms (0.7%)

Algorithm
egg-herbie
Rules
90×fma-neg_binary64
85×fma-def_binary64
42×cancel-sign-sub-inv_binary64
38×distribute-rgt-in_binary64
34×distribute-lft-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
015234
134234
280234
3210234
4434234
5567234
6677234
7682234
Stop Event
saturated
Counts
58 → 28
Calls
Call 1
Inputs
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
(+.f64 (*.f64 y z) (*.f64 z x))
Outputs
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 (+.f64 y x) z)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 x) (*.f64 -1 y)) z))
(*.f64 (+.f64 y x) z)
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 z x)
(*.f64 x z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 z x)
(*.f64 x z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 z x)
(*.f64 x z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)
(+.f64 (*.f64 y z) (*.f64 z x))
(*.f64 (+.f64 y x) z)

eval41.0ms (0.7%)

Compiler

Compiled 259 to 83 computations (68% saved)

prune16.0ms (0.2%)

Pruning

11 alts after pruning (2 fresh and 9 done)

PrunedKeptTotal
New28028
Fresh022
Picked011
Done088
Total281139
Error
0b
Counts
39 → 11
Alt Table
Click to see full alt table
StatusErrorProgram
42.5b
y
32.5b
(+.f64 (*.f64 y z) y)
43.3b
x
40.2b
(*.f64 (+.f64 y x) z)
40.2b
(+.f64 (*.f64 z y) (*.f64 z x))
22.5b
(+.f64 y x)
0.0b
(*.f64 (+.f64 x y) (+.f64 z 1))
40.2b
(fma.f64 z x (*.f64 z y))
31.1b
(*.f64 (+.f64 1 z) x)
52.5b
(*.f64 z y)
50.3b
(*.f64 z x)
Compiler

Compiled 79 to 52 computations (34.2% saved)

regimes94.0ms (1.5%)

Counts
16 → 1
Calls
Call 1
Inputs
y
x
y
(*.f64 z y)
(*.f64 z x)
(+.f64 y x)
(+.f64 (*.f64 y z) y)
(*.f64 (+.f64 1 z) x)
(*.f64 (+.f64 y x) z)
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 z y) (*.f64 z x))
(*.f64 (+.f64 x y) (+.f64 z 1))
(+.f64 (+.f64 x y) (*.f64 (+.f64 x y) z))
(+.f64 (*.f64 (+.f64 z 1) y) (*.f64 (+.f64 z 1) x))
(fma.f64 z x (*.f64 z y))
(fma.f64 (+.f64 z 1) x (*.f64 (+.f64 z 1) y))
Outputs
(+.f64 (+.f64 x y) (*.f64 (+.f64 x y) z))
Calls

7 calls:

18.0ms
(*.f64 (+.f64 x y) (+.f64 z 1))
18.0ms
(+.f64 x y)
12.0ms
y
11.0ms
z
10.0ms
(+.f64 z 1)
Results
ErrorSegmentsBranch
0.0b1x
0.0b1y
0.0b1z
0.0b1(*.f64 (+.f64 x y) (+.f64 z 1))
0.0b1(+.f64 x y)
0.0b1(+.f64 z 1)
0.0b1(+.f64 z 1)
Compiler

Compiled 125 to 66 computations (47.2% saved)

regimes83.0ms (1.3%)

Counts
12 → 1
Calls
Call 1
Inputs
y
x
y
(*.f64 z y)
(*.f64 z x)
(+.f64 y x)
(+.f64 (*.f64 y z) y)
(*.f64 (+.f64 1 z) x)
(*.f64 (+.f64 y x) z)
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 z y) (*.f64 z x))
(*.f64 (+.f64 x y) (+.f64 z 1))
Outputs
(*.f64 (+.f64 x y) (+.f64 z 1))
Calls

6 calls:

33.0ms
z
12.0ms
(*.f64 (+.f64 x y) (+.f64 z 1))
12.0ms
x
8.0ms
(+.f64 z 1)
7.0ms
y
Results
ErrorSegmentsBranch
0.0b1x
0.0b1y
0.0b1z
0.0b1(*.f64 (+.f64 x y) (+.f64 z 1))
0.0b1(+.f64 x y)
0.0b1(+.f64 z 1)
Compiler

Compiled 83 to 45 computations (45.8% saved)

regimes184.0ms (2.9%)

Counts
11 → 3
Calls
Call 1
Inputs
y
x
y
(*.f64 z y)
(*.f64 z x)
(+.f64 y x)
(+.f64 (*.f64 y z) y)
(*.f64 (+.f64 1 z) x)
(*.f64 (+.f64 y x) z)
(*.f64 y (+.f64 1 z))
(+.f64 (*.f64 z y) (*.f64 z x))
Outputs
(*.f64 (+.f64 y x) z)
(+.f64 y x)
(*.f64 (+.f64 y x) z)
Calls

3 calls:

112.0ms
x
43.0ms
z
25.0ms
y
Results
ErrorSegmentsBranch
7.6b9x
9.5b2y
0.9b3z
Compiler

Compiled 54 to 25 computations (53.7% saved)

bsearch41.0ms (0.7%)

Algorithm
binary-search
Steps
TimeLeftRight
19.0ms
1.5838275979479375e-7
177753334286075140.0
22.0ms
-535.2718147454776
-7.559811477330059e-7
Compiler

Compiled 16 to 12 computations (25% saved)

regimes127.0ms (2%)

Counts
8 → 6
Calls
Call 1
Inputs
y
x
y
(*.f64 z y)
(*.f64 z x)
(+.f64 y x)
(+.f64 (*.f64 y z) y)
(*.f64 (+.f64 1 z) x)
Outputs
(*.f64 z x)
(*.f64 z y)
(*.f64 (+.f64 1 z) x)
(+.f64 y x)
(*.f64 (+.f64 1 z) x)
(*.f64 z y)
Calls

3 calls:

69.0ms
z
39.0ms
x
17.0ms
y
Results
ErrorSegmentsBranch
8.8b6x
9.5b2y
6.6b6z
Compiler

Compiled 37 to 20 computations (45.9% saved)

bsearch223.0ms (3.6%)

Algorithm
binary-search
Steps
TimeLeftRight
26.0ms
1.0053481862851716e+128
1.970640855665353e+133
17.0ms
7.266665387251684e-17
7.620482737871498e-9
18.0ms
-535.2718147454776
-7.559811477330059e-7
108.0ms
-3.809917125319522e+48
-3.3211009229689693e+40
54.0ms
-1.6136553767504768e+156
-3.970679893367901e+137
Compiler

Compiled 444 to 328 computations (26.1% saved)

regimes90.0ms (1.4%)

Counts
7 → 6
Calls
Call 1
Inputs
y
x
y
(*.f64 z y)
(*.f64 z x)
(+.f64 y x)
(+.f64 (*.f64 y z) y)
Outputs
(*.f64 z x)
(*.f64 z y)
(*.f64 z x)
(+.f64 y x)
(*.f64 z x)
(*.f64 z y)
Calls

3 calls:

34.0ms
z
31.0ms
y
22.0ms
x
Results
ErrorSegmentsBranch
13.0b5x
16.4b6y
7.0b6z
Compiler

Compiled 32 to 17 computations (46.9% saved)

bsearch168.0ms (2.7%)

Algorithm
binary-search
Steps
TimeLeftRight
23.0ms
1.0053481862851716e+128
1.970640855665353e+133
23.0ms
1.5838275979479375e-7
177753334286075140.0
16.0ms
-535.2718147454776
-7.559811477330059e-7
80.0ms
-3.809917125319522e+48
-3.3211009229689693e+40
26.0ms
-1.6136553767504768e+156
-3.970679893367901e+137
Compiler

Compiled 408 to 292 computations (28.4% saved)

regimes132.0ms (2.1%)

Counts
5 → 11
Calls
Call 1
Inputs
y
x
y
(*.f64 z y)
(*.f64 z x)
Outputs
(*.f64 z x)
(*.f64 z y)
(*.f64 z x)
y
x
y
x
y
x
(*.f64 z x)
(*.f64 z y)
Calls

3 calls:

52.0ms
z
45.0ms
y
33.0ms
x
Results
ErrorSegmentsBranch
22.7b7x
22.7b10y
20.0b11z
Compiler

Compiled 24 to 14 computations (41.7% saved)

bsearch277.0ms (4.4%)

Algorithm
10×binary-search
Steps
TimeLeftRight
23.0ms
1.0053481862851716e+128
1.970640855665353e+133
17.0ms
1.5838275979479375e-7
177753334286075140.0
18.0ms
7.122653941216803e-136
6.13129540271049e-121
37.0ms
8.47911469577862e-242
8.895721383753547e-226
16.0ms
-5.428266031199458e-291
-5.311724962218009e-298
17.0ms
-4.998424197425952e-261
-1.2889886846073884e-264
16.0ms
-6.747577639576872e-192
-1.1127564323676778e-198
28.0ms
-535.2718147454776
-7.559811477330059e-7
79.0ms
-3.809917125319522e+48
-3.3211009229689693e+40
25.0ms
-1.6136553767504768e+156
-3.970679893367901e+137
Compiler

Compiled 408 to 292 computations (28.4% saved)

regimes331.0ms (5.3%)

Counts
4 → 8
Calls
Call 1
Inputs
y
x
y
(*.f64 z y)
Outputs
(*.f64 z y)
y
x
y
x
y
x
(*.f64 z y)
Calls

3 calls:

233.0ms
x
71.0ms
z
25.0ms
y
Results
ErrorSegmentsBranch
26.2b4x
26.1b6y
25.9b8z
Compiler

Compiled 21 to 13 computations (38.1% saved)

bsearch222.0ms (3.5%)

Algorithm
binary-search
Steps
TimeLeftRight
20.0ms
6658774636180322000.0
2.174072329297226e+24
42.0ms
7.122653941216803e-136
6.13129540271049e-121
66.0ms
8.47911469577862e-242
8.895721383753547e-226
23.0ms
-5.428266031199458e-291
-5.311724962218009e-298
22.0ms
-4.998424197425952e-261
-1.2889886846073884e-264
18.0ms
-6.747577639576872e-192
-1.1127564323676778e-198
31.0ms
-535.2718147454776
-7.559811477330059e-7
Compiler

Compiled 16 to 12 computations (25% saved)

regimes53.0ms (0.8%)

Accuracy

Total -34.0b remaining (-120.6%)

Threshold costs -34.0b (-120.6%)

Counts
3 → 2
Calls
Call 1
Inputs
y
x
y
Outputs
x
y
Calls

3 calls:

25.0ms
x
20.0ms
z
7.0ms
y
Results
ErrorSegmentsBranch
28.2b2x
28.3b2y
35.6b6z
Compiler

Compiled 18 to 12 computations (33.3% saved)

bsearch17.0ms (0.3%)

Algorithm
binary-search
Steps
TimeLeftRight
17.0ms
-509139568013.42114
-108929274622.95476
Compiler

Compiled 16 to 12 computations (25% saved)

simplify13.0ms (0.2%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
072318
188318
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(+.f64 (+.f64 x y) (*.f64 (+.f64 x y) z))
(*.f64 (+.f64 x y) (+.f64 z 1))
(if (<=.f64 z -4708300674667309/8796093022208) (*.f64 (+.f64 y x) z) (if (<=.f64 z 23373169884979/147573952589676412928) (+.f64 y x) (*.f64 (+.f64 y x) z)))
(if (<=.f64 z -1600000000000000011481970465456269286528983699026564988907404354340010586887813442052265711753219029286185181012748194180161304547671507615243738458833813504) (*.f64 z x) (if (<=.f64 z -33999999999999998856806021345479952957440) (*.f64 z y) (if (<=.f64 z -4708300674667309/8796093022208) (*.f64 (+.f64 1 z) x) (if (<=.f64 z 2947709676738335/40564819207303340847894502572032) (+.f64 y x) (if (<=.f64 z 19500000000000000688020700666723435662027754777817959495444062367334375152341647799326216185676194073321101544396828760883110300614656) (*.f64 (+.f64 1 z) x) (*.f64 z y))))))
(if (<=.f64 z -1600000000000000011481970465456269286528983699026564988907404354340010586887813442052265711753219029286185181012748194180161304547671507615243738458833813504) (*.f64 z x) (if (<=.f64 z -33999999999999998856806021345479952957440) (*.f64 z y) (if (<=.f64 z -4708300674667309/8796093022208) (*.f64 z x) (if (<=.f64 z 23373169884979/147573952589676412928) (+.f64 y x) (if (<=.f64 z 19500000000000000688020700666723435662027754777817959495444062367334375152341647799326216185676194073321101544396828760883110300614656) (*.f64 z x) (*.f64 z y))))))
(if (<=.f64 z -1600000000000000011481970465456269286528983699026564988907404354340010586887813442052265711753219029286185181012748194180161304547671507615243738458833813504) (*.f64 z x) (if (<=.f64 z -33999999999999998856806021345479952957440) (*.f64 z y) (if (<=.f64 z -4708300674667309/8796093022208) (*.f64 z x) (if (<=.f64 z -2166331505763143/321053216647239593947814323906257853121968982105906607635393121525191171526921436896586092302098904493834409720225721295960658706676257560005359788247795462033399882271023229870096664909931806474077957259264) y (if (<=.f64 z -11341463161189091328/2269007733883335972287082669296112915239349672942191252221331572442536403137824056312817862695551072066953619064625508194663368599769448406663254670871573830845597595897613333042429214224697474472410882236254024057110212260250671521235807709272244389361641091086035023229622419456) x (if (<=.f64 z -975835657849357568/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216) y (if (<=.f64 z 10429578653191903232/123003155723136208567847447683223664415731869180715065944930703618254955521953492303010368693540149343822709050322214299552689203876695953600699775494388206142090885899729347827083318884583758435450548517566916626912548274908112766882031433928533568160966639616) x (if (<=.f64 z 9549917599528353792/13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096) y (if (<=.f64 z 23373169884979/147573952589676412928) x (if (<=.f64 z 19500000000000000688020700666723435662027754777817959495444062367334375152341647799326216185676194073321101544396828760883110300614656) (*.f64 z x) (*.f64 z y)))))))))))
(if (<=.f64 z -4708300674667309/8796093022208) (*.f64 z y) (if (<=.f64 z -2166331505763143/321053216647239593947814323906257853121968982105906607635393121525191171526921436896586092302098904493834409720225721295960658706676257560005359788247795462033399882271023229870096664909931806474077957259264) y (if (<=.f64 z -11341463161189091328/2269007733883335972287082669296112915239349672942191252221331572442536403137824056312817862695551072066953619064625508194663368599769448406663254670871573830845597595897613333042429214224697474472410882236254024057110212260250671521235807709272244389361641091086035023229622419456) x (if (<=.f64 z -975835657849357568/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216) y (if (<=.f64 z 10429578653191903232/123003155723136208567847447683223664415731869180715065944930703618254955521953492303010368693540149343822709050322214299552689203876695953600699775494388206142090885899729347827083318884583758435450548517566916626912548274908112766882031433928533568160966639616) x (if (<=.f64 z 9549917599528353792/13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096) y (if (<=.f64 z 6658774636180322304) x (*.f64 z y))))))))
(if (<=.f64 x -2085435670582973/4096) x y)
y
Outputs
(+.f64 (+.f64 x y) (*.f64 (+.f64 x y) z))
(+.f64 (*.f64 z (+.f64 x y)) (+.f64 x y))
(*.f64 (+.f64 x y) (+.f64 z 1))
(*.f64 (+.f64 z 1) (+.f64 x y))
(if (<=.f64 z -4708300674667309/8796093022208) (*.f64 (+.f64 y x) z) (if (<=.f64 z 23373169884979/147573952589676412928) (+.f64 y x) (*.f64 (+.f64 y x) z)))
(if (<=.f64 z -4708300674667309/8796093022208) (*.f64 z (+.f64 x y)) (if (<=.f64 z 23373169884979/147573952589676412928) (+.f64 x y) (*.f64 z (+.f64 x y))))
(if (<=.f64 z -1600000000000000011481970465456269286528983699026564988907404354340010586887813442052265711753219029286185181012748194180161304547671507615243738458833813504) (*.f64 z x) (if (<=.f64 z -33999999999999998856806021345479952957440) (*.f64 z y) (if (<=.f64 z -4708300674667309/8796093022208) (*.f64 (+.f64 1 z) x) (if (<=.f64 z 2947709676738335/40564819207303340847894502572032) (+.f64 y x) (if (<=.f64 z 19500000000000000688020700666723435662027754777817959495444062367334375152341647799326216185676194073321101544396828760883110300614656) (*.f64 (+.f64 1 z) x) (*.f64 z y))))))
(if (<=.f64 z -1600000000000000011481970465456269286528983699026564988907404354340010586887813442052265711753219029286185181012748194180161304547671507615243738458833813504) (*.f64 x z) (if (<=.f64 z -33999999999999998856806021345479952957440) (*.f64 y z) (if (<=.f64 z -4708300674667309/8796093022208) (*.f64 x (+.f64 z 1)) (if (<=.f64 z 2947709676738335/40564819207303340847894502572032) (+.f64 x y) (if (<=.f64 z 19500000000000000688020700666723435662027754777817959495444062367334375152341647799326216185676194073321101544396828760883110300614656) (*.f64 x (+.f64 z 1)) (*.f64 y z))))))
(if (<=.f64 z -1600000000000000011481970465456269286528983699026564988907404354340010586887813442052265711753219029286185181012748194180161304547671507615243738458833813504) (*.f64 z x) (if (<=.f64 z -33999999999999998856806021345479952957440) (*.f64 z y) (if (<=.f64 z -4708300674667309/8796093022208) (*.f64 z x) (if (<=.f64 z 23373169884979/147573952589676412928) (+.f64 y x) (if (<=.f64 z 19500000000000000688020700666723435662027754777817959495444062367334375152341647799326216185676194073321101544396828760883110300614656) (*.f64 z x) (*.f64 z y))))))
(if (<=.f64 z -1600000000000000011481970465456269286528983699026564988907404354340010586887813442052265711753219029286185181012748194180161304547671507615243738458833813504) (*.f64 x z) (if (<=.f64 z -33999999999999998856806021345479952957440) (*.f64 y z) (if (<=.f64 z -4708300674667309/8796093022208) (*.f64 x z) (if (<=.f64 z 23373169884979/147573952589676412928) (+.f64 x y) (if (<=.f64 z 19500000000000000688020700666723435662027754777817959495444062367334375152341647799326216185676194073321101544396828760883110300614656) (*.f64 x z) (*.f64 y z))))))
(if (<=.f64 z -1600000000000000011481970465456269286528983699026564988907404354340010586887813442052265711753219029286185181012748194180161304547671507615243738458833813504) (*.f64 z x) (if (<=.f64 z -33999999999999998856806021345479952957440) (*.f64 z y) (if (<=.f64 z -4708300674667309/8796093022208) (*.f64 z x) (if (<=.f64 z -2166331505763143/321053216647239593947814323906257853121968982105906607635393121525191171526921436896586092302098904493834409720225721295960658706676257560005359788247795462033399882271023229870096664909931806474077957259264) y (if (<=.f64 z -11341463161189091328/2269007733883335972287082669296112915239349672942191252221331572442536403137824056312817862695551072066953619064625508194663368599769448406663254670871573830845597595897613333042429214224697474472410882236254024057110212260250671521235807709272244389361641091086035023229622419456) x (if (<=.f64 z -975835657849357568/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216) y (if (<=.f64 z 10429578653191903232/123003155723136208567847447683223664415731869180715065944930703618254955521953492303010368693540149343822709050322214299552689203876695953600699775494388206142090885899729347827083318884583758435450548517566916626912548274908112766882031433928533568160966639616) x (if (<=.f64 z 9549917599528353792/13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096) y (if (<=.f64 z 23373169884979/147573952589676412928) x (if (<=.f64 z 19500000000000000688020700666723435662027754777817959495444062367334375152341647799326216185676194073321101544396828760883110300614656) (*.f64 z x) (*.f64 z y)))))))))))
(if (<=.f64 z -1600000000000000011481970465456269286528983699026564988907404354340010586887813442052265711753219029286185181012748194180161304547671507615243738458833813504) (*.f64 x z) (if (<=.f64 z -33999999999999998856806021345479952957440) (*.f64 y z) (if (<=.f64 z -4708300674667309/8796093022208) (*.f64 x z) (if (<=.f64 z -2166331505763143/321053216647239593947814323906257853121968982105906607635393121525191171526921436896586092302098904493834409720225721295960658706676257560005359788247795462033399882271023229870096664909931806474077957259264) y (if (<=.f64 z -5537823809174361/1107913932560222642718302084617242634394213707491304322373697056856707228094640652496493097019312046907692196808899173923175472949106175979816042319761510659592576951121881510274623639758153063707231876091920910184135845830200523203728421733043088080742988814006853038686339072) x (if (<=.f64 z -3811858038474053/702223880805592151456759840151962786569522257399338504974336254522393264865238137237142489540654437582500444843247630303354647534431314931612685275935445798350655833690880801860555545317367555154113605281582053784524026102900245630757473088050106395169337932361665227499793929447186391815763110662594625536) y (if (<=.f64 z 5092567701753859/60060134630437601839769261564074054890494076748396028293423195126101052500953853663579281588642651046788432153477643700953461525330417946094091687253119241280317815380727220618693026799113163298559838143343221009234642712357476936954116911097916781328596992) x (if (<=.f64 z 291440356430919/409173825987017733751648712103449894027080255755383098685411421012016724550584319360408761540738019643860835515945008876152157068235674131666065948672) y (if (<=.f64 z 23373169884979/147573952589676412928) x (if (<=.f64 z 19500000000000000688020700666723435662027754777817959495444062367334375152341647799326216185676194073321101544396828760883110300614656) (*.f64 x z) (*.f64 y z)))))))))))
(if (<=.f64 z -4708300674667309/8796093022208) (*.f64 z y) (if (<=.f64 z -2166331505763143/321053216647239593947814323906257853121968982105906607635393121525191171526921436896586092302098904493834409720225721295960658706676257560005359788247795462033399882271023229870096664909931806474077957259264) y (if (<=.f64 z -11341463161189091328/2269007733883335972287082669296112915239349672942191252221331572442536403137824056312817862695551072066953619064625508194663368599769448406663254670871573830845597595897613333042429214224697474472410882236254024057110212260250671521235807709272244389361641091086035023229622419456) x (if (<=.f64 z -975835657849357568/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216) y (if (<=.f64 z 10429578653191903232/123003155723136208567847447683223664415731869180715065944930703618254955521953492303010368693540149343822709050322214299552689203876695953600699775494388206142090885899729347827083318884583758435450548517566916626912548274908112766882031433928533568160966639616) x (if (<=.f64 z 9549917599528353792/13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096) y (if (<=.f64 z 6658774636180322304) x (*.f64 z y))))))))
(if (<=.f64 z -4708300674667309/8796093022208) (*.f64 y z) (if (<=.f64 z -2166331505763143/321053216647239593947814323906257853121968982105906607635393121525191171526921436896586092302098904493834409720225721295960658706676257560005359788247795462033399882271023229870096664909931806474077957259264) y (if (<=.f64 z -5537823809174361/1107913932560222642718302084617242634394213707491304322373697056856707228094640652496493097019312046907692196808899173923175472949106175979816042319761510659592576951121881510274623639758153063707231876091920910184135845830200523203728421733043088080742988814006853038686339072) x (if (<=.f64 z -3811858038474053/702223880805592151456759840151962786569522257399338504974336254522393264865238137237142489540654437582500444843247630303354647534431314931612685275935445798350655833690880801860555545317367555154113605281582053784524026102900245630757473088050106395169337932361665227499793929447186391815763110662594625536) y (if (<=.f64 z 5092567701753859/60060134630437601839769261564074054890494076748396028293423195126101052500953853663579281588642651046788432153477643700953461525330417946094091687253119241280317815380727220618693026799113163298559838143343221009234642712357476936954116911097916781328596992) x (if (<=.f64 z 291440356430919/409173825987017733751648712103449894027080255755383098685411421012016724550584319360408761540738019643860835515945008876152157068235674131666065948672) y (if (<=.f64 z 6658774636180322304) x (*.f64 y z))))))))
(if (<=.f64 x -2085435670582973/4096) x y)
y
Compiler

Compiled 252 to 141 computations (44% saved)

soundness0.0ms (0%)

end95.0ms (1.5%)

Remove

(sort x y)

Compiler

Compiled 252 to 119 computations (52.8% saved)

Profiling

Loading profile data...