Details

Time bar (total: 6.3s)

analyze355.0ms (5.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
25%71.8%3.3%9
34.3%60.1%5.6%10
40.6%53.8%5.6%11
46.8%44.1%9.1%12
Compiler

Compiled 13 to 9 computations (30.8% saved)

sample3.0s (48%)

Results
2.5s8256×body256valid
483.0ms1255×body256invalid

preprocess178.0ms (2.8%)

Algorithm
egg-herbie
Rules
768×fma-neg_binary64
441×fma-def_binary64
180×cancel-sign-sub-inv_binary64
127×distribute-rgt-in_binary64
113×sub-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
02044
14344
28744
315144
433736
568032
6114232
7186932
8249032
9278832
10286332
11286432
12286432
033
Stop Event
saturated
saturated
Calls
Call 1
Inputs
0
1
2
Outputs
0
1
2
Call 2
Inputs
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
(+.f64 (*.f64 y x) (*.f64 z (-.f64 1 x)))
(+.f64 (*.f64 z y) (*.f64 x (-.f64 1 y)))
(+.f64 (*.f64 x z) (*.f64 y (-.f64 1 z)))
Outputs
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
(fma.f64 x y (*.f64 z (-.f64 1 y)))
(fma.f64 x y (-.f64 z (*.f64 y z)))
(fma.f64 y (fma.f64 z -1 x) z)
(fma.f64 y (-.f64 x z) z)
(+.f64 (*.f64 y x) (*.f64 z (-.f64 1 x)))
(fma.f64 y x (*.f64 z (-.f64 1 x)))
(fma.f64 x y (*.f64 z (-.f64 1 x)))
(fma.f64 x y (fma.f64 z (neg.f64 x) z))
(fma.f64 x (fma.f64 z -1 y) z)
(fma.f64 x (-.f64 y z) z)
(+.f64 (*.f64 z y) (*.f64 x (-.f64 1 y)))
(fma.f64 z y (*.f64 x (-.f64 1 y)))
(fma.f64 x (-.f64 1 y) (*.f64 y z))
(-.f64 (fma.f64 y z x) (*.f64 x y))
(fma.f64 y (fma.f64 x -1 z) x)
(fma.f64 y (-.f64 z x) x)
(+.f64 (*.f64 x z) (*.f64 y (-.f64 1 z)))
(fma.f64 x z (*.f64 y (-.f64 1 z)))
(fma.f64 x z (fma.f64 z (neg.f64 y) y))
(fma.f64 z (fma.f64 y -1 x) y)
(fma.f64 z (-.f64 x y) y)
Compiler

Compiled 15 to 11 computations (26.7% saved)

simplify50.0ms (0.8%)

Algorithm
egg-herbie
Rules
354×fma-def_binary64
246×fma-neg_binary64
54×cancel-sign-sub-inv_binary64
44×distribute-rgt-in_binary64
42×associate--r+_binary64
Iterations

Useful iterations: 5 (0.0ms)

IterNodesCost
0911
11711
23011
35711
41269
52188
63478
75588
89698
911548
1012148
1112248
Stop Event
saturated
Counts
1 → 2
Calls
Call 1
Inputs
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
Outputs
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
(fma.f64 x y (*.f64 z (-.f64 1 y)))
(fma.f64 z (-.f64 1 y) (*.f64 x y))
(-.f64 (fma.f64 x y z) (*.f64 y z))
(fma.f64 y (fma.f64 z -1 x) z)
(fma.f64 y (-.f64 x z) z)

eval1.0ms (0%)

Compiler

Compiled 18 to 10 computations (44.4% saved)

prune2.0ms (0%)

Pruning

2 alts after pruning (2 fresh and 0 done)

PrunedKeptTotal
New112
Fresh011
Picked000
Done000
Total123
Error
0b
Counts
3 → 1
Alt Table
Click to see full alt table
StatusErrorProgram
0b
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
Compiler

Compiled 12 to 8 computations (33.3% saved)

localize22.0ms (0.3%)

Local error

Found 1 expressions with local error:

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

Compiled 27 to 14 computations (48.1% saved)

series6.0ms (0.1%)

Counts
1 → 12
Calls

6 calls:

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

rewrite69.0ms (1.1%)

Algorithm
batch-egg-rewrite
Rules
617×pow1_binary64
572×add-log-exp_binary64
572×log1p-expm1-u_binary64
572×expm1-log1p-u_binary64
561×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify180.0ms (2.8%)

Algorithm
egg-herbie
Rules
140×fma-def_binary64
84×fma-neg_binary64
22×cancel-sign-sub-inv_binary64
21×associate-*r*_binary64
19×associate-*l*_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0785
11476
23376
35176
47276
514676
628376
739276
847576
953976
Stop Event
saturated
Counts
29 → 22
Calls
Call 1
Inputs
z
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(+.f64 (*.f64 -1 (*.f64 y z)) z)
Outputs
z
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(fma.f64 -1 (*.f64 z y) z)
(-.f64 z (*.f64 z y))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(fma.f64 -1 (*.f64 z y) z)
(-.f64 z (*.f64 z y))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(fma.f64 -1 (*.f64 z y) z)
(-.f64 z (*.f64 z y))
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 z y))
(*.f64 z (neg.f64 y))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(fma.f64 -1 (*.f64 z y) z)
(-.f64 z (*.f64 z y))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(fma.f64 -1 (*.f64 z y) z)
(-.f64 z (*.f64 z y))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(fma.f64 -1 (*.f64 z y) z)
(-.f64 z (*.f64 z y))
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 z y))
(*.f64 z (neg.f64 y))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(fma.f64 -1 (*.f64 z y) z)
(-.f64 z (*.f64 z y))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(fma.f64 -1 (*.f64 z y) z)
(-.f64 z (*.f64 z y))
(+.f64 (*.f64 -1 (*.f64 y z)) z)
(fma.f64 -1 (*.f64 z y) z)
(-.f64 z (*.f64 z y))

eval9.0ms (0.1%)

Compiler

Compiled 260 to 134 computations (48.5% saved)

prune9.0ms (0.1%)

Pruning

3 alts after pruning (2 fresh and 1 done)

PrunedKeptTotal
New20222
Fresh000
Picked011
Done000
Total20323
Error
0b
Counts
23 → 3
Alt Table
Click to see full alt table
StatusErrorProgram
25.9b
(+.f64 (*.f64 x y) (*.f64 y (neg.f64 z)))
0b
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
12.6b
(+.f64 (*.f64 x y) z)
Compiler

Compiled 31 to 20 computations (35.5% saved)

localize14.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 14 to 5 computations (64.3% saved)

series7.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

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

rewrite83.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
707×pow1_binary64
655×add-log-exp_binary64
655×log1p-expm1-u_binary64
655×expm1-log1p-u_binary64
640×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify20.0ms (0.3%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
06159
19159
210159
Stop Event
saturated
Counts
71 → 38
Calls
Call 1
Inputs
z
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
z
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
z
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
z
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) z)
Outputs
z
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
z
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(*.f64 y x)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
z
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
z
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)
(+.f64 (*.f64 y x) z)
(fma.f64 y x z)

localize156.0ms (2.5%)

Local error

Found 1 expressions with local error:

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

Compiled 23 to 7 computations (69.6% saved)

series9.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

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

rewrite75.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
815×pow1_binary64
754×add-log-exp_binary64
753×log1p-expm1-u_binary64
753×expm1-log1p-u_binary64
737×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify58.0ms (0.9%)

Algorithm
egg-herbie
Rules
142×fma-def_binary64
108×fma-neg_binary64
32×unsub-neg_binary64
30×cancel-sign-sub-inv_binary64
28×associate-*r*_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
017330
148240
2100240
3174240
4310240
5494240
6609240
7650240
Stop Event
saturated
Counts
79 → 50
Calls
Call 1
Inputs
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 x) z)))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 x) z)))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 x) z)))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 x) z)))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
Outputs
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 y z))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y (+.f64 (*.f64 -1 z) x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 x) z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 x) z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 x) z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 x) z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 y z))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 y z))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))

eval36.0ms (0.6%)

Compiler

Compiled 1013 to 342 computations (66.2% saved)

prune35.0ms (0.6%)

Pruning

7 alts after pruning (5 fresh and 2 done)

PrunedKeptTotal
New83588
Fresh000
Picked101
Done022
Total84791
Error
0b
Counts
91 → 7
Alt Table
Click to see full alt table
StatusErrorProgram
25.9b
(-.f64 (*.f64 x y) (*.f64 y z))
25.9b
(*.f64 y (-.f64 x z))
37.3b
z
12.6b
(+.f64 (*.f64 x y) z)
50.0b
(*.f64 y (neg.f64 z))
38.3b
(*.f64 y x)
0b
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
Compiler

Compiled 55 to 36 computations (34.5% saved)

localize7.0ms (0.1%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize10.0ms (0.2%)

Compiler

Compiled 11 to 5 computations (54.5% saved)

localize11.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 14 to 5 computations (64.3% saved)

series10.0ms (0.2%)

Counts
1 → 24
Calls

9 calls:

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

rewrite65.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
725×pow1_binary64
672×add-log-exp_binary64
672×log1p-expm1-u_binary64
672×expm1-log1p-u_binary64
657×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify48.0ms (0.8%)

Algorithm
egg-herbie
Rules
217×fma-def_binary64
132×fma-neg_binary64
41×cancel-sign-sub-inv_binary64
25×distribute-rgt-in_binary64
25×sub-neg_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
010210
118210
235156
358156
486156
5138156
6254156
7410156
8576156
9730156
10744156
Stop Event
saturated
Counts
43 → 25
Calls
Call 1
Inputs
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
Outputs
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 y z))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 y z))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 y z))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(-.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (-.f64 x z))

localize13.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 19 to 6 computations (68.4% saved)

series6.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

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

rewrite79.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
877×pow1_binary64
812×add-log-exp_binary64
812×log1p-expm1-u_binary64
812×expm1-log1p-u_binary64
795×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0710
11607
222227
Stop Event
node limit
Counts
1 → 49
Calls
Call 1
Inputs
(-.f64 (*.f64 x y) (*.f64 y z))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 x y) (*.f64 z (neg.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 x y) (*.f64 (*.f64 z (neg.f64 y)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 x y) (+.f64 (*.f64 z (neg.f64 y)) (fma.f64 (neg.f64 z) y (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (-.f64 x z)) (fma.f64 (neg.f64 z) y (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (-.f64 x z)) (fma.f64 (neg.f64 y) z (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (-.f64 x z)) (fma.f64 (*.f64 z (neg.f64 y)) 1 (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (-.f64 x z)) (fma.f64 (neg.f64 (cbrt.f64 (*.f64 y z))) (pow.f64 (cbrt.f64 (*.f64 y z)) 2) (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (-.f64 x z)) (fma.f64 (neg.f64 (sqrt.f64 (*.f64 y z))) (sqrt.f64 (*.f64 y z)) (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (-.f64 x z)) (*.f64 (fma.f64 (neg.f64 z) y (*.f64 y z)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (-.f64 x z)) (+.f64 (fma.f64 (neg.f64 z) y (*.f64 y z)) (fma.f64 (neg.f64 z) y (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (fma.f64 (neg.f64 z) y (*.f64 y z)) (*.f64 y (-.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 z (neg.f64 y)) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 y (-.f64 x z))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 y (-.f64 x z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 y (-.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 y (-.f64 x z))) (pow.f64 (cbrt.f64 (*.f64 y (-.f64 x z))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 y (-.f64 x z))) 2) (cbrt.f64 (*.f64 y (-.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 y (-.f64 x z))) (sqrt.f64 (*.f64 y (-.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (*.f64 x y) 3) (pow.f64 (*.f64 y z) 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 x y) 2) (*.f64 (*.f64 y z) (*.f64 y (+.f64 x z))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 y (+.f64 x z)) (*.f64 y (-.f64 x z))) (/.f64 1 (*.f64 y (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (sqrt.f64 (*.f64 x y)) (sqrt.f64 (*.f64 y z))) (-.f64 (sqrt.f64 (*.f64 x y)) (sqrt.f64 (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 x y) 2) (*.f64 (*.f64 y z) (*.f64 y (+.f64 x z)))) (-.f64 (pow.f64 (*.f64 x y) 3) (pow.f64 (*.f64 y z) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (*.f64 y (+.f64 x z)) (*.f64 (*.f64 y (+.f64 x z)) (*.f64 y (-.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 x y) 3) (pow.f64 (*.f64 y z) 3)) (+.f64 (pow.f64 (*.f64 x y) 2) (*.f64 (*.f64 y z) (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (*.f64 y (+.f64 x z)) (*.f64 y (-.f64 x z))) (*.f64 y (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 x y) 3) (pow.f64 (*.f64 y z) 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 x y) 2) (*.f64 (*.f64 y z) (*.f64 y (+.f64 x z))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (*.f64 (*.f64 y (+.f64 x z)) (*.f64 y (-.f64 x z)))) (neg.f64 (*.f64 y (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 x y) 3) (pow.f64 (*.f64 z (neg.f64 y)) 3)) (+.f64 (pow.f64 (*.f64 x y) 2) (-.f64 (*.f64 (*.f64 z (neg.f64 y)) (*.f64 z (neg.f64 y))) (*.f64 (*.f64 x y) (*.f64 z (neg.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 y (-.f64 x z)) 3) (pow.f64 (fma.f64 (neg.f64 z) y (*.f64 y z)) 3)) (+.f64 (pow.f64 (*.f64 y (-.f64 x z)) 2) (-.f64 (*.f64 (fma.f64 (neg.f64 z) y (*.f64 y z)) (fma.f64 (neg.f64 z) y (*.f64 y z))) (*.f64 (*.f64 y (-.f64 x z)) (fma.f64 (neg.f64 z) y (*.f64 y z))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 x y) 2) (*.f64 (*.f64 z (neg.f64 y)) (*.f64 z (neg.f64 y)))) (-.f64 (*.f64 x y) (*.f64 z (neg.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 y (-.f64 x z)) 2) (*.f64 (fma.f64 (neg.f64 z) y (*.f64 y z)) (fma.f64 (neg.f64 z) y (*.f64 y z)))) (-.f64 (*.f64 y (-.f64 x z)) (fma.f64 (neg.f64 z) y (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 y (-.f64 x z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 y (-.f64 x z)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 y (-.f64 x z))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 y (-.f64 x z))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 y (-.f64 x z)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 y (-.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 y (-.f64 x z)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 y (-.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 y (-.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 y (-.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x y (*.f64 z (neg.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y x (*.f64 z (neg.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 x y) (*.f64 z (neg.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 y (-.f64 x z)) (fma.f64 (neg.f64 z) y (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 y (-.f64 x z))) 2) (cbrt.f64 (*.f64 y (-.f64 x z))) (fma.f64 (neg.f64 z) y (*.f64 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 z (neg.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 y (-.f64 x z))) (sqrt.f64 (*.f64 y (-.f64 x z))) (fma.f64 (neg.f64 z) y (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 x y)) (sqrt.f64 (*.f64 x y)) (*.f64 z (neg.f64 y)))))))

simplify52.0ms (0.8%)

Algorithm
egg-herbie
Rules
118×fma-def_binary64
80×fma-neg_binary64
34×unsub-neg_binary64
28×associate-*l*_binary64
28×distribute-rgt-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
017330
144240
297240
3243240
4411240
5530240
6599240
7604240
Stop Event
saturated
Counts
85 → 56
Calls
Call 1
Inputs
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(*.f64 y (-.f64 x z))
(*.f64 y (-.f64 x z))
(*.f64 y (-.f64 x z))
(*.f64 y (-.f64 x z))
(*.f64 y (-.f64 x z))
(*.f64 y (-.f64 x z))
(*.f64 y (-.f64 x z))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 x) (*.f64 -1 z))))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 x) (*.f64 -1 z))))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 x) (*.f64 -1 z))))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 x) (*.f64 -1 z))))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(*.f64 -1 (*.f64 y z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
Outputs
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 y z))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y (-.f64 x z))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 x) (*.f64 -1 z))))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 x) (*.f64 -1 z))))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 x) (*.f64 -1 z))))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y (-.f64 (*.f64 -1 x) (*.f64 -1 z))))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y z)) (*.f64 y x))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 y z))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(*.f64 -1 (*.f64 y z))
(neg.f64 (*.f64 y z))
(*.f64 y (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 y z)))
(fma.f64 y x (neg.f64 (*.f64 y z)))
(*.f64 y (-.f64 x z))

eval27.0ms (0.4%)

Compiler

Compiled 1046 to 275 computations (73.7% saved)

prune27.0ms (0.4%)

Pruning

7 alts after pruning (1 fresh and 6 done)

PrunedKeptTotal
New81081
Fresh011
Picked011
Done055
Total81788
Error
0b
Counts
88 → 7
Alt Table
Click to see full alt table
StatusErrorProgram
25.9b
(-.f64 (*.f64 x y) (*.f64 y z))
25.9b
(*.f64 y (-.f64 x z))
37.3b
z
12.6b
(+.f64 (*.f64 x y) z)
50.0b
(*.f64 y (neg.f64 z))
38.3b
(*.f64 y x)
0b
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
Compiler

Compiled 55 to 36 computations (34.5% saved)

eval0.0ms (0%)

Compiler

Compiled 3 to 3 computations (0% saved)

prune5.0ms (0.1%)

Pruning

7 alts after pruning (1 fresh and 6 done)

PrunedKeptTotal
New000
Fresh011
Picked000
Done066
Total077
Error
0b
Counts
7 → 7
Alt Table
Click to see full alt table
StatusErrorProgram
25.9b
(-.f64 (*.f64 x y) (*.f64 y z))
25.9b
(*.f64 y (-.f64 x z))
37.3b
z
12.6b
(+.f64 (*.f64 x y) z)
50.0b
(*.f64 y (neg.f64 z))
38.3b
(*.f64 y x)
0b
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
Compiler

Compiled 55 to 36 computations (34.5% saved)

regimes49.0ms (0.8%)

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

4 calls:

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

Compiled 69 to 34 computations (50.7% saved)

regimes70.0ms (1.1%)

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

3 calls:

32.0ms
y
24.0ms
x
11.0ms
z
Results
ErrorSegmentsBranch
11.4b3x
0.6b3y
12.6b1z
Compiler

Compiled 48 to 22 computations (54.2% saved)

bsearch219.0ms (3.5%)

Algorithm
binary-search
Steps
TimeLeftRight
184.0ms
0.033406460876505645
4517047190.771689
34.0ms
-1278488925.4544115
-0.009486713821083254
Compiler

Compiled 18 to 13 computations (27.8% saved)

regimes72.0ms (1.1%)

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

3 calls:

29.0ms
y
28.0ms
x
11.0ms
z
Results
ErrorSegmentsBranch
11.4b3x
0.6b3y
12.6b1z
Compiler

Compiled 33 to 19 computations (42.4% saved)

bsearch72.0ms (1.1%)

Algorithm
binary-search
Steps
TimeLeftRight
37.0ms
0.033406460876505645
4517047190.771689
35.0ms
-1278488925.4544115
-0.009486713821083254
Compiler

Compiled 18 to 13 computations (27.8% saved)

regimes283.0ms (4.5%)

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

3 calls:

132.0ms
x
117.0ms
z
32.0ms
y
Results
ErrorSegmentsBranch
19.9b7x
9.4b3y
18.6b5z
Compiler

Compiled 28 to 17 computations (39.3% saved)

bsearch56.0ms (0.9%)

Algorithm
binary-search
Steps
TimeLeftRight
22.0ms
2.04735886815879e-88
6.713059904270007e-73
34.0ms
-3.9173118535925755e-112
-8.559152100023359e-114
Compiler

Compiled 18 to 13 computations (27.8% saved)

regimes194.0ms (3.1%)

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

3 calls:

77.0ms
y
65.0ms
x
50.0ms
z
Results
ErrorSegmentsBranch
23.1b7x
17.3b8y
25.0b7z
Compiler

Compiled 23 to 15 computations (34.8% saved)

bsearch212.0ms (3.3%)

Algorithm
binary-search
Steps
TimeLeftRight
31.0ms
1.9524605834250614e+172
7.674397010917306e+176
87.0ms
6.025557972697738e+80
8.887890559264279e+83
18.0ms
2.04735886815879e-88
6.713059904270007e-73
21.0ms
-3.9173118535925755e-112
-8.559152100023359e-114
17.0ms
-1.2340267944634626e-41
-3.461507153346498e-42
20.0ms
-5.3338955905921374e-11
-1.971583301263317e-11
18.0ms
-6.142441801157425e+20
-1.4384106792111255e+20
Compiler

Compiled 258 to 189 computations (26.7% saved)

regimes47.0ms (0.7%)

Accuracy

Total -41.3b remaining (-200%)

Threshold costs -41.3b (-200%)

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

3 calls:

19.0ms
z
17.0ms
y
9.0ms
x
Results
ErrorSegmentsBranch
25.3b3x
20.7b5y
25.0b7z
Compiler

Compiled 19 to 13 computations (31.6% saved)

bsearch99.0ms (1.6%)

Algorithm
binary-search
Steps
TimeLeftRight
25.0ms
2.04735886815879e-88
6.713059904270007e-73
39.0ms
-3.9173118535925755e-112
-8.559152100023359e-114
17.0ms
-1.2340267944634626e-41
-3.461507153346498e-42
17.0ms
-5.3338955905921374e-11
-1.971583301263317e-11
Compiler

Compiled 18 to 13 computations (27.8% saved)

simplify22.0ms (0.4%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
053220
176220
286220
391220
493220
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
(if (<=.f64 y -1340592803497285/1048576) (*.f64 y (-.f64 x z)) (if (<=.f64 y 1203594598041583/36028797018963968) (+.f64 (*.f64 x y) z) (-.f64 (*.f64 x y) (*.f64 y z))))
(if (<=.f64 y -1340592803497285/1048576) (*.f64 y (-.f64 x z)) (if (<=.f64 y 1203594598041583/36028797018963968) (+.f64 (*.f64 x y) z) (*.f64 y (-.f64 x z))))
(if (<=.f64 y -8485478014747163/21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860608) (*.f64 y (-.f64 x z)) (if (<=.f64 y 458556126030975/2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115776) z (*.f64 y (-.f64 x z))))
(if (<=.f64 y -614244180115742523392) (*.f64 y (neg.f64 z)) (if (<=.f64 y -1031725455775273/19342813113834066795298816) (*.f64 y x) (if (<=.f64 y -4841319833150165/392318858461667547739736838950479151006397215279002157056) z (if (<=.f64 y -8485478014747163/21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860608) (*.f64 y x) (if (<=.f64 y 458556126030975/2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115776) z (if (<=.f64 y 879999999999999994757927642668658325237403690843704639481016440762156093239384342528) (*.f64 y x) (if (<=.f64 y 749999999999999949350312944765785133449764857862592168398517927210521975591417462549820148886831914818340625653452770338782692455596140847214601237158433015215964412205781221376) (*.f64 y (neg.f64 z)) (*.f64 y x))))))))
(if (<=.f64 y -1031725455775273/19342813113834066795298816) (*.f64 y x) (if (<=.f64 y -4841319833150165/392318858461667547739736838950479151006397215279002157056) z (if (<=.f64 y -8485478014747163/21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860608) (*.f64 y x) (if (<=.f64 y 458556126030975/2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115776) z (*.f64 y x)))))
z
Outputs
(+.f64 (*.f64 x y) (*.f64 z (-.f64 1 y)))
(+.f64 (*.f64 z (-.f64 1 y)) (*.f64 x y))
(if (<=.f64 y -1340592803497285/1048576) (*.f64 y (-.f64 x z)) (if (<=.f64 y 1203594598041583/36028797018963968) (+.f64 (*.f64 x y) z) (-.f64 (*.f64 x y) (*.f64 y z))))
(if (<=.f64 y -1340592803497285/1048576) (*.f64 y (-.f64 x z)) (if (<=.f64 y 1203594598041583/36028797018963968) (+.f64 z (*.f64 x y)) (-.f64 (*.f64 x y) (*.f64 y z))))
(if (<=.f64 y -1340592803497285/1048576) (*.f64 y (-.f64 x z)) (if (<=.f64 y 1203594598041583/36028797018963968) (+.f64 (*.f64 x y) z) (*.f64 y (-.f64 x z))))
(if (<=.f64 y -1340592803497285/1048576) (*.f64 y (-.f64 x z)) (if (<=.f64 y 1203594598041583/36028797018963968) (+.f64 z (*.f64 x y)) (*.f64 y (-.f64 x z))))
(if (<=.f64 y -8485478014747163/21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860608) (*.f64 y (-.f64 x z)) (if (<=.f64 y 458556126030975/2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115776) z (*.f64 y (-.f64 x z))))
(if (<=.f64 y -614244180115742523392) (*.f64 y (neg.f64 z)) (if (<=.f64 y -1031725455775273/19342813113834066795298816) (*.f64 y x) (if (<=.f64 y -4841319833150165/392318858461667547739736838950479151006397215279002157056) z (if (<=.f64 y -8485478014747163/21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860608) (*.f64 y x) (if (<=.f64 y 458556126030975/2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115776) z (if (<=.f64 y 879999999999999994757927642668658325237403690843704639481016440762156093239384342528) (*.f64 y x) (if (<=.f64 y 749999999999999949350312944765785133449764857862592168398517927210521975591417462549820148886831914818340625653452770338782692455596140847214601237158433015215964412205781221376) (*.f64 y (neg.f64 z)) (*.f64 y x))))))))
(if (<=.f64 y -614244180115742523392) (*.f64 y (neg.f64 z)) (if (<=.f64 y -1031725455775273/19342813113834066795298816) (*.f64 x y) (if (<=.f64 y -4841319833150165/392318858461667547739736838950479151006397215279002157056) z (if (<=.f64 y -8485478014747163/21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860608) (*.f64 x y) (if (<=.f64 y 458556126030975/2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115776) z (if (<=.f64 y 879999999999999994757927642668658325237403690843704639481016440762156093239384342528) (*.f64 x y) (if (<=.f64 y 749999999999999949350312944765785133449764857862592168398517927210521975591417462549820148886831914818340625653452770338782692455596140847214601237158433015215964412205781221376) (*.f64 y (neg.f64 z)) (*.f64 x y))))))))
(if (<=.f64 y -1031725455775273/19342813113834066795298816) (*.f64 y x) (if (<=.f64 y -4841319833150165/392318858461667547739736838950479151006397215279002157056) z (if (<=.f64 y -8485478014747163/21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860608) (*.f64 y x) (if (<=.f64 y 458556126030975/2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115776) z (*.f64 y x)))))
(if (<=.f64 y -1031725455775273/19342813113834066795298816) (*.f64 x y) (if (<=.f64 y -4841319833150165/392318858461667547739736838950479151006397215279002157056) z (if (<=.f64 y -8485478014747163/21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860608) (*.f64 x y) (if (<=.f64 y 458556126030975/2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115776) z (*.f64 x y)))))
z
Compiler

Compiled 175 to 93 computations (46.9% saved)

soundness0.0ms (0%)

end167.0ms (2.6%)

Compiler

Compiled 157 to 66 computations (58% saved)

Profiling

Loading profile data...