Details

Time bar (total: 3.0s)

analyze266.0ms (8.9%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%99.9%0.1%0%0%0%0
0%0%99.9%0.1%0%0%0%1
0%0%99.9%0.1%0%0%0%2
0%0%99.9%0.1%0%0%0%3
0%0%99.9%0.1%0%0%0%4
0%0%99.9%0.1%0%0%0%5
0%0%99.9%0.1%0%0%0%6
12.5%12.5%87.4%0.1%0%0%0%7
18.8%18.7%81.1%0.1%0%0%0%8
25.8%25%71.8%0.1%3.1%0%0%9
36.4%34.3%60.1%0.1%5.5%0%0%10
44.5%41.3%51.5%0.1%7%0%0%11
51.5%46.8%44.1%0.1%9%0%0%12
Compiler

Compiled 13 to 9 computations (30.8% saved)

sample1.1s (38%)

Results
903.0ms8256×body256valid
221.0ms1249×body256infinite
Bogosity

preprocess118.0ms (3.9%)

Algorithm
egg-herbie
Rules
1070×associate--r+
1054×fma-def
870×fma-neg
692×associate--l+
676×associate-+l-
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
02184
14684
27584
310976
417376
525376
640076
767876
8157476
9334076
10459576
11483976
12485676
13485676
033
Stop Event
saturated
saturated
Calls
Call 1
Inputs
0
1
2
Outputs
0
1
2
Call 2
Inputs
(+.f64 (*.f64 x y) (*.f64 (-.f64 x 1) z))
(+.f64 (*.f64 y x) (*.f64 (-.f64 y 1) z))
(+.f64 (*.f64 z y) (*.f64 (-.f64 z 1) x))
(+.f64 (*.f64 x z) (*.f64 (-.f64 x 1) y))
Outputs
(+.f64 (*.f64 x y) (*.f64 (-.f64 x 1) z))
(fma.f64 x y (*.f64 (+.f64 x -1) z))
(-.f64 (*.f64 x (+.f64 y z)) z)
(fma.f64 x (+.f64 y z) (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 (-.f64 y 1) z))
(fma.f64 y x (*.f64 z (+.f64 y -1)))
(fma.f64 x y (*.f64 z (+.f64 y -1)))
(-.f64 (*.f64 y (+.f64 x z)) z)
(fma.f64 y (+.f64 x z) (neg.f64 z))
(+.f64 (*.f64 z y) (*.f64 (-.f64 z 1) x))
(fma.f64 z y (*.f64 x (+.f64 z -1)))
(fma.f64 y z (*.f64 x (+.f64 z -1)))
(-.f64 (*.f64 z (+.f64 y x)) x)
(-.f64 (*.f64 z (+.f64 x y)) x)
(fma.f64 z (+.f64 x y) (neg.f64 x))
(+.f64 (*.f64 x z) (*.f64 (-.f64 x 1) y))
(fma.f64 x z (*.f64 y (+.f64 x -1)))
(-.f64 (*.f64 x (+.f64 y z)) y)
Compiler

Compiled 15 to 11 computations (26.7% saved)

simplify53.0ms (1.8%)

Algorithm
egg-herbie
Rules
638×fma-def
270×associate--r+
216×associate-+r+
214×associate-*r*
200×associate-+l+
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
01021
12121
23121
34419
46119
58619
613719
723119
850619
9103119
10165819
11175419
12175919
Stop Event
saturated
Counts
1 → 3
Calls
Call 1
Inputs
(+.f64 (*.f64 x y) (*.f64 (-.f64 x 1) z))
Outputs
(+.f64 (*.f64 x y) (*.f64 (-.f64 x 1) z))
(fma.f64 x y (*.f64 (+.f64 x -1) z))
(-.f64 (*.f64 x (+.f64 y z)) z)

eval1.0ms (0%)

Compiler

Compiled 27 to 15 computations (44.4% saved)

prune1.0ms (0%)

Pruning

2 alts after pruning (2 fresh and 0 done)

PrunedKeptTotal
New123
Fresh101
Picked000
Done000
Total224
Error
0b
Counts
4 → 2
Alt Table
Click to see full alt table
StatusErrorProgram
0b
(fma.f64 x y (*.f64 (+.f64 x -1) z))
0.0b
(-.f64 (*.f64 x (+.f64 y z)) z)
Compiler

Compiled 21 to 13 computations (38.1% saved)

localize6.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 21 to 6 computations (71.4% saved)

series3.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

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

rewrite58.0ms (1.9%)

Algorithm
batch-egg-rewrite
Rules
1770×add-sqr-sqrt
1754×*-un-lft-identity
1640×add-cube-cbrt
1612×add-cbrt-cube
166×pow1
Iterations

Useful iterations: 0 (0.0ms)

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

simplify56.0ms (1.9%)

Algorithm
egg-herbie
Rules
1540×associate-/r*
810×associate-*r/
714×associate-+r+
610×associate-+l+
588×associate-*l/
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
081894
1230888
2921886
33689876
Stop Event
node limit
Counts
60 → 34
Calls
Call 1
Inputs
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 x y) (*.f64 x z))
(+.f64 (*.f64 x z) (*.f64 x y))
(+.f64 (*.f64 (*.f64 x y) 1) (*.f64 (*.f64 x z) 1))
(-.f64 (exp.f64 (log1p.f64 (*.f64 x (+.f64 y z)))) 1)
(/.f64 (*.f64 x (-.f64 (*.f64 y y) (*.f64 z z))) (-.f64 y z))
(/.f64 (*.f64 x (+.f64 (pow.f64 y 3) (pow.f64 z 3))) (fma.f64 y y (*.f64 z (-.f64 z y))))
(/.f64 (*.f64 (-.f64 (*.f64 y y) (*.f64 z z)) x) (-.f64 y z))
(/.f64 (*.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) x) (fma.f64 y y (*.f64 z (-.f64 z y))))
(/.f64 (-.f64 (*.f64 (*.f64 x y) (*.f64 x y)) (*.f64 (*.f64 x z) (*.f64 x z))) (-.f64 (*.f64 x y) (*.f64 x z)))
(/.f64 (+.f64 (pow.f64 (*.f64 x y) 3) (pow.f64 (*.f64 x z) 3)) (+.f64 (*.f64 (*.f64 x y) (*.f64 x y)) (-.f64 (*.f64 (*.f64 x z) (*.f64 x z)) (*.f64 (*.f64 x y) (*.f64 x z)))))
(pow.f64 (*.f64 x (+.f64 y z)) 1)
(pow.f64 (sqrt.f64 (*.f64 x (+.f64 y z))) 2)
(pow.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) 3)
(pow.f64 (pow.f64 (*.f64 x (+.f64 y z)) 3) 1/3)
(sqrt.f64 (pow.f64 (*.f64 x (+.f64 y z)) 2))
(log.f64 (pow.f64 (exp.f64 (+.f64 y z)) x))
(log.f64 (+.f64 1 (expm1.f64 (*.f64 x (+.f64 y z)))))
(cbrt.f64 (pow.f64 (*.f64 x (+.f64 y z)) 3))
(expm1.f64 (log1p.f64 (*.f64 x (+.f64 y z))))
(exp.f64 (log.f64 (*.f64 x (+.f64 y z))))
(exp.f64 (*.f64 (log.f64 (*.f64 x (+.f64 y z))) 1))
(log1p.f64 (expm1.f64 (*.f64 x (+.f64 y z))))
(fma.f64 x y (*.f64 x z))
(fma.f64 y x (*.f64 x z))
Outputs
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 x y) (*.f64 x z))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 x z) (*.f64 x y))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 (*.f64 x y) 1) (*.f64 (*.f64 x z) 1))
(*.f64 (+.f64 y z) x)
(-.f64 (exp.f64 (log1p.f64 (*.f64 x (+.f64 y z)))) 1)
(*.f64 (+.f64 y z) x)
(/.f64 (*.f64 x (-.f64 (*.f64 y y) (*.f64 z z))) (-.f64 y z))
(*.f64 (+.f64 y z) x)
(/.f64 (*.f64 x (+.f64 (pow.f64 y 3) (pow.f64 z 3))) (fma.f64 y y (*.f64 z (-.f64 z y))))
(*.f64 (/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (fma.f64 y y (*.f64 z (-.f64 z y)))) x)
(*.f64 x (/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (fma.f64 y y (*.f64 z (-.f64 z y)))))
(/.f64 (*.f64 (-.f64 (*.f64 y y) (*.f64 z z)) x) (-.f64 y z))
(*.f64 (+.f64 y z) x)
(/.f64 (*.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) x) (fma.f64 y y (*.f64 z (-.f64 z y))))
(/.f64 (*.f64 x (+.f64 (pow.f64 y 3) (pow.f64 z 3))) (fma.f64 y y (*.f64 z (-.f64 z y))))
(*.f64 (/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (fma.f64 y y (*.f64 z (-.f64 z y)))) x)
(*.f64 x (/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (fma.f64 y y (*.f64 z (-.f64 z y)))))
(/.f64 (-.f64 (*.f64 (*.f64 x y) (*.f64 x y)) (*.f64 (*.f64 x z) (*.f64 x z))) (-.f64 (*.f64 x y) (*.f64 x z)))
(*.f64 (+.f64 y z) x)
(/.f64 (+.f64 (pow.f64 (*.f64 x y) 3) (pow.f64 (*.f64 x z) 3)) (+.f64 (*.f64 (*.f64 x y) (*.f64 x y)) (-.f64 (*.f64 (*.f64 x z) (*.f64 x z)) (*.f64 (*.f64 x y) (*.f64 x z)))))
(/.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 (*.f64 z x) 3)) (fma.f64 (*.f64 y x) (*.f64 y x) (*.f64 (*.f64 z x) (-.f64 (*.f64 z x) (*.f64 y x)))))
(/.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 (*.f64 z x) 3)) (fma.f64 x (*.f64 y (*.f64 y x)) (*.f64 (*.f64 z x) (*.f64 x (-.f64 z y)))))
(/.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 (*.f64 z x) 3)) (*.f64 x (+.f64 (*.f64 y (*.f64 y x)) (*.f64 z (*.f64 x (-.f64 z y))))))
(/.f64 (/.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 (*.f64 z x) 3)) x) (*.f64 x (fma.f64 y y (*.f64 z (-.f64 z y)))))
(pow.f64 (*.f64 x (+.f64 y z)) 1)
(*.f64 (+.f64 y z) x)
(pow.f64 (sqrt.f64 (*.f64 x (+.f64 y z))) 2)
(*.f64 (+.f64 y z) x)
(pow.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) 3)
(*.f64 (+.f64 y z) x)
(pow.f64 (pow.f64 (*.f64 x (+.f64 y z)) 3) 1/3)
(*.f64 (+.f64 y z) x)
(sqrt.f64 (pow.f64 (*.f64 x (+.f64 y z)) 2))
(*.f64 (+.f64 y z) x)
(log.f64 (pow.f64 (exp.f64 (+.f64 y z)) x))
(*.f64 (+.f64 y z) x)
(log.f64 (+.f64 1 (expm1.f64 (*.f64 x (+.f64 y z)))))
(*.f64 (+.f64 y z) x)
(cbrt.f64 (pow.f64 (*.f64 x (+.f64 y z)) 3))
(*.f64 (+.f64 y z) x)
(expm1.f64 (log1p.f64 (*.f64 x (+.f64 y z))))
(*.f64 (+.f64 y z) x)
(exp.f64 (log.f64 (*.f64 x (+.f64 y z))))
(*.f64 (+.f64 y z) x)
(exp.f64 (*.f64 (log.f64 (*.f64 x (+.f64 y z))) 1))
(*.f64 (+.f64 y z) x)
(log1p.f64 (expm1.f64 (*.f64 x (+.f64 y z))))
(*.f64 (+.f64 y z) x)
(fma.f64 x y (*.f64 x z))
(*.f64 (+.f64 y z) x)
(fma.f64 y x (*.f64 x z))
(*.f64 (+.f64 y z) x)

localize10.0ms (0.3%)

Local error

Found 1 expressions with local error:

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

Compiled 23 to 13 computations (43.5% saved)

series2.0ms (0.1%)

Counts
1 → 24
Calls

6 calls:

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

rewrite57.0ms (1.9%)

Algorithm
batch-egg-rewrite
Rules
1502×add-sqr-sqrt
1486×*-un-lft-identity
1382×add-cube-cbrt
1366×add-cbrt-cube
1354×add-exp-log
Iterations

Useful iterations: 0 (0.0ms)

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

simplify60.0ms (2%)

Algorithm
egg-herbie
Rules
1064×*-commutative
916×fma-def
676×associate-*r*
616×distribute-lft-out
602×associate-*l*
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
062616
1143612
2425604
32444604
45211604
Stop Event
node limit
Counts
44 → 31
Calls
Call 1
Inputs
(*.f64 -1 z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(+.f64 (*.f64 z x) (*.f64 z -1))
(+.f64 (*.f64 z -1) (*.f64 z x))
(+.f64 (*.f64 x z) (*.f64 -1 z))
(+.f64 (*.f64 -1 z) (*.f64 x z))
(-.f64 (+.f64 1 (*.f64 (+.f64 x -1) z)) 1)
(/.f64 (*.f64 z (fma.f64 x x -1)) (+.f64 x 1))
(/.f64 (*.f64 z (+.f64 -1 (pow.f64 x 3))) (fma.f64 x x (-.f64 1 (*.f64 x -1))))
(/.f64 (*.f64 (fma.f64 x x -1) z) (+.f64 x 1))
(/.f64 (*.f64 (+.f64 -1 (pow.f64 x 3)) z) (fma.f64 x x (-.f64 1 (*.f64 x -1))))
(pow.f64 (*.f64 (+.f64 x -1) z) 1)
(pow.f64 (sqrt.f64 (*.f64 (+.f64 x -1) z)) 2)
(pow.f64 (cbrt.f64 (*.f64 (+.f64 x -1) z)) 3)
(pow.f64 (pow.f64 (*.f64 (+.f64 x -1) z) 3) 1/3)
(sqrt.f64 (pow.f64 (*.f64 (+.f64 x -1) z) 2))
(log.f64 (pow.f64 (exp.f64 z) (+.f64 x -1)))
(cbrt.f64 (pow.f64 (*.f64 (+.f64 x -1) z) 3))
(expm1.f64 (log1p.f64 (*.f64 (+.f64 x -1) z)))
(exp.f64 (log.f64 (*.f64 (+.f64 x -1) z)))
(exp.f64 (*.f64 (log.f64 (*.f64 (+.f64 x -1) z)) 1))
(log1p.f64 (expm1.f64 (*.f64 (+.f64 x -1) z)))
Outputs
(*.f64 -1 z)
(neg.f64 z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 z x)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 z x)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(*.f64 (-.f64 x 1) z)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 z x) (*.f64 z -1))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 z -1) (*.f64 z x))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 x z) (*.f64 -1 z))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(+.f64 (*.f64 -1 z) (*.f64 x z))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(-.f64 (+.f64 1 (*.f64 (+.f64 x -1) z)) 1)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(/.f64 (*.f64 z (fma.f64 x x -1)) (+.f64 x 1))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(/.f64 (*.f64 z (+.f64 -1 (pow.f64 x 3))) (fma.f64 x x (-.f64 1 (*.f64 x -1))))
(/.f64 z (/.f64 (fma.f64 x x (-.f64 1 (*.f64 -1 x))) (+.f64 -1 (pow.f64 x 3))))
(*.f64 (/.f64 z (fma.f64 x x (-.f64 1 (neg.f64 x)))) (+.f64 -1 (pow.f64 x 3)))
(*.f64 (+.f64 -1 (pow.f64 x 3)) (/.f64 z (+.f64 x (fma.f64 x x 1))))
(*.f64 z (/.f64 (+.f64 -1 (pow.f64 x 3)) (+.f64 1 (fma.f64 x x x))))
(/.f64 (*.f64 (fma.f64 x x -1) z) (+.f64 x 1))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(/.f64 (*.f64 (+.f64 -1 (pow.f64 x 3)) z) (fma.f64 x x (-.f64 1 (*.f64 x -1))))
(/.f64 z (/.f64 (fma.f64 x x (-.f64 1 (*.f64 -1 x))) (+.f64 -1 (pow.f64 x 3))))
(*.f64 (/.f64 z (fma.f64 x x (-.f64 1 (neg.f64 x)))) (+.f64 -1 (pow.f64 x 3)))
(*.f64 (+.f64 -1 (pow.f64 x 3)) (/.f64 z (+.f64 x (fma.f64 x x 1))))
(*.f64 z (/.f64 (+.f64 -1 (pow.f64 x 3)) (+.f64 1 (fma.f64 x x x))))
(pow.f64 (*.f64 (+.f64 x -1) z) 1)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(pow.f64 (sqrt.f64 (*.f64 (+.f64 x -1) z)) 2)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(pow.f64 (cbrt.f64 (*.f64 (+.f64 x -1) z)) 3)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(pow.f64 (pow.f64 (*.f64 (+.f64 x -1) z) 3) 1/3)
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(sqrt.f64 (pow.f64 (*.f64 (+.f64 x -1) z) 2))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(log.f64 (pow.f64 (exp.f64 z) (+.f64 x -1)))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(cbrt.f64 (pow.f64 (*.f64 (+.f64 x -1) z) 3))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(expm1.f64 (log1p.f64 (*.f64 (+.f64 x -1) z)))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(exp.f64 (log.f64 (*.f64 (+.f64 x -1) z)))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(exp.f64 (*.f64 (log.f64 (*.f64 (+.f64 x -1) z)) 1))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))
(log1p.f64 (expm1.f64 (*.f64 (+.f64 x -1) z)))
(fma.f64 z x (neg.f64 z))
(*.f64 z (+.f64 -1 x))

eval14.0ms (0.5%)

Compiler

Compiled 850 to 378 computations (55.5% saved)

prune9.0ms (0.3%)

Pruning

4 alts after pruning (3 fresh and 1 done)

PrunedKeptTotal
New62365
Fresh000
Picked101
Done011
Total63467
Error
0b
Counts
67 → 4
Alt Table
Click to see full alt table
StatusErrorProgram
27.8b
(fma.f64 x y (*.f64 z x))
22.2b
(-.f64 (*.f64 z x) z)
12.9b
(-.f64 (*.f64 y x) z)
0.0b
(-.f64 (*.f64 x (+.f64 y z)) z)
Compiler

Compiled 35 to 21 computations (40% saved)

localize7.0ms (0.2%)

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)

series2.0ms (0.1%)

Counts
1 → 36
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)

rewrite62.0ms (2.1%)

Algorithm
batch-egg-rewrite
Rules
1664×add-sqr-sqrt
1648×*-un-lft-identity
1534×add-cube-cbrt
1518×add-cbrt-cube
162×pow1
Iterations

Useful iterations: 0 (0.0ms)

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

simplify66.0ms (2.2%)

Algorithm
egg-herbie
Rules
1626×associate-/r*
994×associate-+r+
708×associate-+l+
652×fma-def
568×*-commutative
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
01061419
12691339
211161327
338691327
Stop Event
node limit
Counts
75 → 48
Calls
Call 1
Inputs
(*.f64 -1 z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(*.f64 -1 z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(*.f64 -1 z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(*.f64 -1 z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 -1 z) (*.f64 y x))
(+.f64 (*.f64 y x) (neg.f64 z))
(+.f64 (*.f64 y x) (*.f64 (neg.f64 z) 1))
(+.f64 (-.f64 (*.f64 y x) z) (fma.f64 (neg.f64 z) 1 z))
(+.f64 (-.f64 (*.f64 y x) z) (fma.f64 (neg.f64 (sqrt.f64 z)) (sqrt.f64 z) z))
(+.f64 (-.f64 (*.f64 y x) z) (fma.f64 (neg.f64 (cbrt.f64 z)) (cbrt.f64 (*.f64 z z)) z))
(+.f64 (neg.f64 z) (*.f64 y x))
(*.f64 (-.f64 (*.f64 y x) z) 1)
(*.f64 1 (-.f64 (*.f64 y x) z))
(*.f64 (sqrt.f64 (-.f64 (*.f64 y x) z)) (sqrt.f64 (-.f64 (*.f64 y x) z)))
(*.f64 (cbrt.f64 (-.f64 (*.f64 y x) z)) (pow.f64 (cbrt.f64 (-.f64 (*.f64 y x) z)) 2))
(*.f64 (pow.f64 (cbrt.f64 (-.f64 (*.f64 y x) z)) 2) (cbrt.f64 (-.f64 (*.f64 y x) z)))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (/.f64 1 (fma.f64 y x z)))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z)))))
(*.f64 (+.f64 (sqrt.f64 (*.f64 y x)) (sqrt.f64 z)) (-.f64 (sqrt.f64 (*.f64 y x)) (sqrt.f64 z)))
(/.f64 1 (/.f64 (fma.f64 y x z) (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z))))
(/.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z))) (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3))))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (fma.f64 y x z))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z))))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 (neg.f64 z) (neg.f64 z))) (-.f64 (*.f64 y x) (neg.f64 z)))
(/.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 (neg.f64 z) 3)) (+.f64 (pow.f64 (*.f64 y x) 2) (-.f64 (*.f64 (neg.f64 z) (neg.f64 z)) (*.f64 (*.f64 y x) (neg.f64 z)))))
(/.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z))) (neg.f64 (fma.f64 y x z)))
(/.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z)))))
(pow.f64 (-.f64 (*.f64 y x) z) 1)
(pow.f64 (sqrt.f64 (-.f64 (*.f64 y x) z)) 2)
(pow.f64 (cbrt.f64 (-.f64 (*.f64 y x) z)) 3)
(pow.f64 (pow.f64 (-.f64 (*.f64 y x) z) 3) 1/3)
(sqrt.f64 (pow.f64 (-.f64 (*.f64 y x) z) 2))
(log.f64 (exp.f64 (-.f64 (*.f64 y x) z)))
(log.f64 (+.f64 1 (expm1.f64 (-.f64 (*.f64 y x) z))))
(cbrt.f64 (pow.f64 (-.f64 (*.f64 y x) z) 3))
(expm1.f64 (log1p.f64 (-.f64 (*.f64 y x) z)))
(exp.f64 (log.f64 (-.f64 (*.f64 y x) z)))
(exp.f64 (*.f64 (log.f64 (-.f64 (*.f64 y x) z)) 1))
(log1p.f64 (expm1.f64 (-.f64 (*.f64 y x) z)))
(fma.f64 y x (neg.f64 z))
(fma.f64 x y (neg.f64 z))
(fma.f64 1 (*.f64 y x) (neg.f64 z))
(fma.f64 (sqrt.f64 (*.f64 y x)) (sqrt.f64 (*.f64 y x)) (neg.f64 z))
(fma.f64 (pow.f64 (cbrt.f64 (*.f64 y x)) 2) (cbrt.f64 (*.f64 y x)) (neg.f64 z))
Outputs
(*.f64 -1 z)
(neg.f64 z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(*.f64 -1 z)
(neg.f64 z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(*.f64 y x)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(*.f64 -1 z)
(neg.f64 z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(*.f64 -1 z)
(neg.f64 z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 -1 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) (neg.f64 z))
(-.f64 (*.f64 y x) z)
(+.f64 (*.f64 y x) (*.f64 (neg.f64 z) 1))
(-.f64 (*.f64 y x) z)
(+.f64 (-.f64 (*.f64 y x) z) (fma.f64 (neg.f64 z) 1 z))
(-.f64 (*.f64 y x) z)
(+.f64 (-.f64 (*.f64 y x) z) (fma.f64 (neg.f64 (sqrt.f64 z)) (sqrt.f64 z) z))
(-.f64 (*.f64 y x) z)
(+.f64 (-.f64 (*.f64 y x) z) (fma.f64 (neg.f64 (cbrt.f64 z)) (cbrt.f64 (*.f64 z z)) z))
(fma.f64 (neg.f64 (cbrt.f64 z)) (cbrt.f64 (*.f64 z z)) (*.f64 y x))
(-.f64 (*.f64 y x) (*.f64 (cbrt.f64 z) (cbrt.f64 (*.f64 z z))))
(+.f64 (neg.f64 z) (*.f64 y x))
(-.f64 (*.f64 y x) z)
(*.f64 (-.f64 (*.f64 y x) z) 1)
(-.f64 (*.f64 y x) z)
(*.f64 1 (-.f64 (*.f64 y x) z))
(-.f64 (*.f64 y x) z)
(*.f64 (sqrt.f64 (-.f64 (*.f64 y x) z)) (sqrt.f64 (-.f64 (*.f64 y x) z)))
(-.f64 (*.f64 y x) z)
(*.f64 (cbrt.f64 (-.f64 (*.f64 y x) z)) (pow.f64 (cbrt.f64 (-.f64 (*.f64 y x) z)) 2))
(-.f64 (*.f64 y x) z)
(*.f64 (pow.f64 (cbrt.f64 (-.f64 (*.f64 y x) z)) 2) (cbrt.f64 (-.f64 (*.f64 y x) z)))
(-.f64 (*.f64 y x) z)
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (/.f64 1 (fma.f64 y x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (fma.f64 y x z))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 y x z) (pow.f64 (*.f64 y x) 2)))
(*.f64 (+.f64 (sqrt.f64 (*.f64 y x)) (sqrt.f64 z)) (-.f64 (sqrt.f64 (*.f64 y x)) (sqrt.f64 z)))
(*.f64 (+.f64 (sqrt.f64 z) (sqrt.f64 (*.f64 y x))) (-.f64 (sqrt.f64 (*.f64 y x)) (sqrt.f64 z)))
(/.f64 1 (/.f64 (fma.f64 y x z) (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z))))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (/.f64 1 (fma.f64 y x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (fma.f64 y x z))
(/.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z))) (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3))))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 y x z) (pow.f64 (*.f64 y x) 2)))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (fma.f64 y x z))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (/.f64 1 (fma.f64 y x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z))))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 y x z) (pow.f64 (*.f64 y x) 2)))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 (neg.f64 z) (neg.f64 z))) (-.f64 (*.f64 y x) (neg.f64 z)))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (/.f64 1 (fma.f64 y x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (fma.f64 y x z))
(/.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 (neg.f64 z) 3)) (+.f64 (pow.f64 (*.f64 y x) 2) (-.f64 (*.f64 (neg.f64 z) (neg.f64 z)) (*.f64 (*.f64 y x) (neg.f64 z)))))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 y x z) (pow.f64 (*.f64 y x) 2)))
(/.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z))) (neg.f64 (fma.f64 y x z)))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (/.f64 1 (fma.f64 y x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (fma.f64 y x z))
(/.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z)))))
(*.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (fma.f64 y x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 y x z) (pow.f64 (*.f64 y x) 2)))
(pow.f64 (-.f64 (*.f64 y x) z) 1)
(-.f64 (*.f64 y x) z)
(pow.f64 (sqrt.f64 (-.f64 (*.f64 y x) z)) 2)
(-.f64 (*.f64 y x) z)
(pow.f64 (cbrt.f64 (-.f64 (*.f64 y x) z)) 3)
(-.f64 (*.f64 y x) z)
(pow.f64 (pow.f64 (-.f64 (*.f64 y x) z) 3) 1/3)
(-.f64 (*.f64 y x) z)
(sqrt.f64 (pow.f64 (-.f64 (*.f64 y x) z) 2))
(-.f64 (*.f64 y x) z)
(log.f64 (exp.f64 (-.f64 (*.f64 y x) z)))
(-.f64 (*.f64 y x) z)
(log.f64 (+.f64 1 (expm1.f64 (-.f64 (*.f64 y x) z))))
(-.f64 (*.f64 y x) z)
(cbrt.f64 (pow.f64 (-.f64 (*.f64 y x) z) 3))
(-.f64 (*.f64 y x) z)
(expm1.f64 (log1p.f64 (-.f64 (*.f64 y x) z)))
(-.f64 (*.f64 y x) z)
(exp.f64 (log.f64 (-.f64 (*.f64 y x) z)))
(-.f64 (*.f64 y x) z)
(exp.f64 (*.f64 (log.f64 (-.f64 (*.f64 y x) z)) 1))
(-.f64 (*.f64 y x) z)
(log1p.f64 (expm1.f64 (-.f64 (*.f64 y x) z)))
(-.f64 (*.f64 y x) z)
(fma.f64 y x (neg.f64 z))
(-.f64 (*.f64 y x) z)
(fma.f64 x y (neg.f64 z))
(-.f64 (*.f64 y x) z)
(fma.f64 1 (*.f64 y x) (neg.f64 z))
(-.f64 (*.f64 y x) z)
(fma.f64 (sqrt.f64 (*.f64 y x)) (sqrt.f64 (*.f64 y x)) (neg.f64 z))
(-.f64 (*.f64 y x) z)
(fma.f64 (pow.f64 (cbrt.f64 (*.f64 y x)) 2) (cbrt.f64 (*.f64 y x)) (neg.f64 z))
(-.f64 (*.f64 y x) z)

localize5.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 13 to 5 computations (61.5% saved)

series1.0ms (0%)

Counts
1 → 24
Calls

6 calls:

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

rewrite74.0ms (2.5%)

Algorithm
batch-egg-rewrite
Rules
1486×add-sqr-sqrt
1470×*-un-lft-identity
1372×add-cube-cbrt
1358×add-cbrt-cube
1346×add-exp-log
Iterations

Useful iterations: 0 (0.0ms)

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

simplify63.0ms (2.1%)

Algorithm
egg-herbie
Rules
942×associate-+r+
796×associate-/l/
728×associate-*r/
702×associate-+l+
700×*-commutative
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01101273
12881193
211701193
343661193
Stop Event
node limit
Counts
63 → 55
Calls
Call 1
Inputs
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (-.f64 x 1) z)
(*.f64 -1 (*.f64 z (+.f64 1 (*.f64 -1 x))))
(*.f64 -1 (*.f64 z (+.f64 1 (*.f64 -1 x))))
(*.f64 -1 (*.f64 z (+.f64 1 (*.f64 -1 x))))
(*.f64 -1 (*.f64 z (+.f64 1 (*.f64 -1 x))))
(*.f64 -1 z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 z x)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 -1 z) (*.f64 z x))
(+.f64 (*.f64 z x) (neg.f64 z))
(+.f64 (*.f64 z x) (*.f64 (neg.f64 z) 1))
(+.f64 (-.f64 (*.f64 z x) z) (fma.f64 (neg.f64 z) 1 z))
(+.f64 (-.f64 (*.f64 z x) z) (fma.f64 (neg.f64 (sqrt.f64 z)) (sqrt.f64 z) z))
(+.f64 (-.f64 (*.f64 z x) z) (fma.f64 (neg.f64 (cbrt.f64 z)) (pow.f64 (cbrt.f64 z) 2) z))
(+.f64 (neg.f64 z) (*.f64 z x))
(*.f64 z (-.f64 x 1))
(*.f64 (-.f64 (*.f64 z x) z) 1)
(*.f64 1 (-.f64 (*.f64 z x) z))
(*.f64 (sqrt.f64 (-.f64 (*.f64 z x) z)) (sqrt.f64 (-.f64 (*.f64 z x) z)))
(*.f64 (cbrt.f64 (-.f64 (*.f64 z x) z)) (pow.f64 (cbrt.f64 (-.f64 (*.f64 z x) z)) 2))
(*.f64 (pow.f64 (cbrt.f64 (-.f64 (*.f64 z x) z)) 2) (cbrt.f64 (-.f64 (*.f64 z x) z)))
(*.f64 (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z z)) (/.f64 1 (fma.f64 z x z)))
(*.f64 (-.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z (fma.f64 z x z)))))
(*.f64 (+.f64 (sqrt.f64 (*.f64 z x)) (sqrt.f64 z)) (-.f64 (sqrt.f64 (*.f64 z x)) (sqrt.f64 z)))
(/.f64 1 (/.f64 (fma.f64 z x z) (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z z))))
(/.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z (fma.f64 z x z))) (-.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 z 3))))
(/.f64 (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z z)) (fma.f64 z x z))
(/.f64 (-.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 z 3)) (+.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z (fma.f64 z x z))))
(/.f64 (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 (neg.f64 z) (neg.f64 z))) (-.f64 (*.f64 z x) (neg.f64 z)))
(/.f64 (+.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 (neg.f64 z) 3)) (+.f64 (pow.f64 (*.f64 z x) 2) (-.f64 (*.f64 (neg.f64 z) (neg.f64 z)) (*.f64 (*.f64 z x) (neg.f64 z)))))
(/.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z z))) (neg.f64 (fma.f64 z x z)))
(/.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 z 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z (fma.f64 z x z)))))
(pow.f64 (-.f64 (*.f64 z x) z) 1)
(pow.f64 (sqrt.f64 (-.f64 (*.f64 z x) z)) 2)
(pow.f64 (cbrt.f64 (-.f64 (*.f64 z x) z)) 3)
(pow.f64 (pow.f64 (-.f64 (*.f64 z x) z) 3) 1/3)
(sqrt.f64 (pow.f64 (-.f64 (*.f64 z x) z) 2))
(log.f64 (exp.f64 (-.f64 (*.f64 z x) z)))
(cbrt.f64 (pow.f64 (-.f64 (*.f64 z x) z) 3))
(expm1.f64 (log1p.f64 (-.f64 (*.f64 z x) z)))
(exp.f64 (log.f64 (-.f64 (*.f64 z x) z)))
(exp.f64 (*.f64 (log.f64 (-.f64 (*.f64 z x) z)) 1))
(log1p.f64 (expm1.f64 (-.f64 (*.f64 z x) z)))
(fma.f64 z x (neg.f64 z))
(fma.f64 x z (neg.f64 z))
(fma.f64 1 (*.f64 z x) (neg.f64 z))
(fma.f64 (sqrt.f64 (*.f64 z x)) (sqrt.f64 (*.f64 z x)) (neg.f64 z))
(fma.f64 (pow.f64 (cbrt.f64 (*.f64 z x)) 2) (cbrt.f64 (*.f64 z x)) (neg.f64 z))
Outputs
(*.f64 (-.f64 x 1) z)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (-.f64 x 1) z)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 -1 (*.f64 z (+.f64 1 (*.f64 -1 x))))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 -1 (*.f64 z (+.f64 1 (*.f64 -1 x))))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 -1 (*.f64 z (+.f64 1 (*.f64 -1 x))))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 -1 (*.f64 z (+.f64 1 (*.f64 -1 x))))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 -1 z)
(neg.f64 z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 z x)
(*.f64 x z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 z x)
(*.f64 x z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (*.f64 -1 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (*.f64 z x) (neg.f64 z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (*.f64 z x) (*.f64 (neg.f64 z) 1))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (-.f64 (*.f64 z x) z) (fma.f64 (neg.f64 z) 1 z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (-.f64 (*.f64 z x) z) (fma.f64 (neg.f64 (sqrt.f64 z)) (sqrt.f64 z) z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (-.f64 (*.f64 z x) z) (fma.f64 (neg.f64 (cbrt.f64 z)) (pow.f64 (cbrt.f64 z) 2) z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(+.f64 (neg.f64 z) (*.f64 z x))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 z (-.f64 x 1))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (-.f64 (*.f64 z x) z) 1)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 1 (-.f64 (*.f64 z x) z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (sqrt.f64 (-.f64 (*.f64 z x) z)) (sqrt.f64 (-.f64 (*.f64 z x) z)))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (cbrt.f64 (-.f64 (*.f64 z x) z)) (pow.f64 (cbrt.f64 (-.f64 (*.f64 z x) z)) 2))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (pow.f64 (cbrt.f64 (-.f64 (*.f64 z x) z)) 2) (cbrt.f64 (-.f64 (*.f64 z x) z)))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(*.f64 (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z z)) (/.f64 1 (fma.f64 z x z)))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (/.f64 1 (fma.f64 z x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (fma.f64 x z z))
(*.f64 (-.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z (fma.f64 z x z)))))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z (fma.f64 z x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (*.f64 (pow.f64 z 3) (+.f64 -1 (pow.f64 x 3))) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z z (*.f64 x (*.f64 z (fma.f64 x z z)))))
(*.f64 (+.f64 (sqrt.f64 (*.f64 z x)) (sqrt.f64 z)) (-.f64 (sqrt.f64 (*.f64 z x)) (sqrt.f64 z)))
(*.f64 (+.f64 (sqrt.f64 z) (sqrt.f64 (*.f64 x z))) (-.f64 (sqrt.f64 (*.f64 x z)) (sqrt.f64 z)))
(/.f64 1 (/.f64 (fma.f64 z x z) (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z z))))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (/.f64 1 (fma.f64 z x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (fma.f64 x z z))
(/.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z (fma.f64 z x z))) (-.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 z 3))))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z (fma.f64 z x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (*.f64 (pow.f64 z 3) (+.f64 -1 (pow.f64 x 3))) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z z (*.f64 x (*.f64 z (fma.f64 x z z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z z)) (fma.f64 z x z))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (/.f64 1 (fma.f64 z x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (fma.f64 x z z))
(/.f64 (-.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 z 3)) (+.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z (fma.f64 z x z))))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z (fma.f64 z x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (*.f64 (pow.f64 z 3) (+.f64 -1 (pow.f64 x 3))) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z z (*.f64 x (*.f64 z (fma.f64 x z z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 (neg.f64 z) (neg.f64 z))) (-.f64 (*.f64 z x) (neg.f64 z)))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (/.f64 1 (fma.f64 z x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (fma.f64 x z z))
(/.f64 (+.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 (neg.f64 z) 3)) (+.f64 (pow.f64 (*.f64 z x) 2) (-.f64 (*.f64 (neg.f64 z) (neg.f64 z)) (*.f64 (*.f64 z x) (neg.f64 z)))))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z (fma.f64 z x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (*.f64 (pow.f64 z 3) (+.f64 -1 (pow.f64 x 3))) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z z (*.f64 x (*.f64 z (fma.f64 x z z)))))
(/.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z z))) (neg.f64 (fma.f64 z x z)))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (/.f64 1 (fma.f64 z x z)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z z)) (fma.f64 x z z))
(/.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 z x) 3) (pow.f64 z 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 z x) 2) (*.f64 z (fma.f64 z x z)))))
(*.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 x z) 2) (*.f64 z (fma.f64 z x z)))))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (*.f64 (pow.f64 z 3) (+.f64 -1 (pow.f64 x 3))) (fma.f64 z (fma.f64 x z z) (pow.f64 (*.f64 x z) 2)))
(/.f64 (-.f64 (pow.f64 (*.f64 x z) 3) (pow.f64 z 3)) (fma.f64 z z (*.f64 x (*.f64 z (fma.f64 x z z)))))
(pow.f64 (-.f64 (*.f64 z x) z) 1)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(pow.f64 (sqrt.f64 (-.f64 (*.f64 z x) z)) 2)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(pow.f64 (cbrt.f64 (-.f64 (*.f64 z x) z)) 3)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(pow.f64 (pow.f64 (-.f64 (*.f64 z x) z) 3) 1/3)
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(sqrt.f64 (pow.f64 (-.f64 (*.f64 z x) z) 2))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(log.f64 (exp.f64 (-.f64 (*.f64 z x) z)))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(cbrt.f64 (pow.f64 (-.f64 (*.f64 z x) z) 3))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(expm1.f64 (log1p.f64 (-.f64 (*.f64 z x) z)))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(exp.f64 (log.f64 (-.f64 (*.f64 z x) z)))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(exp.f64 (*.f64 (log.f64 (-.f64 (*.f64 z x) z)) 1))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(log1p.f64 (expm1.f64 (-.f64 (*.f64 z x) z)))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(fma.f64 z x (neg.f64 z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(fma.f64 x z (neg.f64 z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(fma.f64 1 (*.f64 z x) (neg.f64 z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(fma.f64 (sqrt.f64 (*.f64 z x)) (sqrt.f64 (*.f64 z x)) (neg.f64 z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)
(fma.f64 (pow.f64 (cbrt.f64 (*.f64 z x)) 2) (cbrt.f64 (*.f64 z x)) (neg.f64 z))
(*.f64 (+.f64 x -1) z)
(-.f64 (*.f64 x z) z)

localize5.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 15 to 5 computations (66.7% saved)

series2.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

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

rewrite58.0ms (1.9%)

Algorithm
batch-egg-rewrite
Rules
1528×add-sqr-sqrt
1518×*-un-lft-identity
1396×add-cube-cbrt
1374×add-cbrt-cube
1358×add-exp-log
Iterations

Useful iterations: 1 (0.0ms)

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

simplify50.0ms (1.7%)

Algorithm
egg-herbie
Rules
1480×associate-/l*
732×*-commutative
722×associate-+r+
658×associate-+l+
568×associate-/r*
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
068853
1189841
2887833
33182827
Stop Event
node limit
Counts
59 → 35
Calls
Call 1
Inputs
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 z) (*.f64 -1 y)) x))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 z) (*.f64 -1 y)) x))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 z) (*.f64 -1 y)) x))
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 z) (*.f64 -1 y)) x))
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 x z) (*.f64 x y))
(+.f64 (*.f64 x y) (*.f64 x z))
(+.f64 (*.f64 (*.f64 x y) 1) (*.f64 x z))
(-.f64 (+.f64 1 (*.f64 x (+.f64 y z))) 1)
(*.f64 x (+.f64 y z))
(*.f64 (*.f64 x (+.f64 y z)) 1)
(*.f64 1 (*.f64 x (+.f64 y z)))
(*.f64 (sqrt.f64 (*.f64 x (+.f64 y z))) (sqrt.f64 (*.f64 x (+.f64 y z))))
(*.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) (pow.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) 2))
(*.f64 (pow.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) 2) (cbrt.f64 (*.f64 x (+.f64 y z))))
(/.f64 (-.f64 (*.f64 (*.f64 x y) (*.f64 x y)) (pow.f64 (*.f64 x z) 2)) (-.f64 (*.f64 x y) (*.f64 x z)))
(/.f64 (+.f64 (pow.f64 (*.f64 x y) 3) (pow.f64 (*.f64 x z) 3)) (+.f64 (*.f64 (*.f64 x y) (*.f64 x y)) (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 (*.f64 x y) (*.f64 x z)))))
(pow.f64 (*.f64 x (+.f64 y z)) 1)
(pow.f64 (sqrt.f64 (*.f64 x (+.f64 y z))) 2)
(pow.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) 3)
(pow.f64 (pow.f64 (*.f64 x (+.f64 y z)) 3) 1/3)
(sqrt.f64 (pow.f64 (*.f64 x (+.f64 y z)) 2))
(log.f64 (exp.f64 (*.f64 x (+.f64 y z))))
(cbrt.f64 (pow.f64 (*.f64 x (+.f64 y z)) 3))
(expm1.f64 (log1p.f64 (*.f64 x (+.f64 y z))))
(exp.f64 (log.f64 (*.f64 x (+.f64 y z))))
(exp.f64 (*.f64 (log.f64 (*.f64 x (+.f64 y z))) 1))
(log1p.f64 (expm1.f64 (*.f64 x (+.f64 y z))))
Outputs
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 (+.f64 y z) x)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 z) (*.f64 -1 y)) x))
(*.f64 (+.f64 y z) x)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 z) (*.f64 -1 y)) x))
(*.f64 (+.f64 y z) x)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 z) (*.f64 -1 y)) x))
(*.f64 (+.f64 y z) x)
(*.f64 -1 (*.f64 (+.f64 (*.f64 -1 z) (*.f64 -1 y)) x))
(*.f64 (+.f64 y z) x)
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 x z) (*.f64 x y))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 x y) (*.f64 x z))
(*.f64 (+.f64 y z) x)
(+.f64 (*.f64 (*.f64 x y) 1) (*.f64 x z))
(*.f64 (+.f64 y z) x)
(-.f64 (+.f64 1 (*.f64 x (+.f64 y z))) 1)
(*.f64 (+.f64 y z) x)
(*.f64 x (+.f64 y z))
(*.f64 (+.f64 y z) x)
(*.f64 (*.f64 x (+.f64 y z)) 1)
(*.f64 (+.f64 y z) x)
(*.f64 1 (*.f64 x (+.f64 y z)))
(*.f64 (+.f64 y z) x)
(*.f64 (sqrt.f64 (*.f64 x (+.f64 y z))) (sqrt.f64 (*.f64 x (+.f64 y z))))
(*.f64 (+.f64 y z) x)
(*.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) (pow.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) 2))
(*.f64 (+.f64 y z) x)
(*.f64 (pow.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) 2) (cbrt.f64 (*.f64 x (+.f64 y z))))
(*.f64 (+.f64 y z) x)
(/.f64 (-.f64 (*.f64 (*.f64 x y) (*.f64 x y)) (pow.f64 (*.f64 x z) 2)) (-.f64 (*.f64 x y) (*.f64 x z)))
(/.f64 (-.f64 (*.f64 (*.f64 y x) (*.f64 y x)) (pow.f64 (*.f64 z x) 2)) (*.f64 x (-.f64 y z)))
(/.f64 (*.f64 (*.f64 (+.f64 y z) x) (*.f64 x (-.f64 y z))) (*.f64 x (-.f64 y z)))
(/.f64 (*.f64 (+.f64 y z) x) (/.f64 (*.f64 x (-.f64 y z)) (*.f64 x (-.f64 y z))))
(*.f64 (/.f64 (-.f64 y z) 1) (/.f64 (+.f64 y z) (/.f64 (-.f64 y z) x)))
(/.f64 (+.f64 (pow.f64 (*.f64 x y) 3) (pow.f64 (*.f64 x z) 3)) (+.f64 (*.f64 (*.f64 x y) (*.f64 x y)) (-.f64 (pow.f64 (*.f64 x z) 2) (*.f64 (*.f64 x y) (*.f64 x z)))))
(/.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 (*.f64 z x) 3)) (fma.f64 (*.f64 y x) (*.f64 y x) (-.f64 (pow.f64 (*.f64 z x) 2) (*.f64 (*.f64 z x) (*.f64 y x)))))
(/.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 (*.f64 z x) 3)) (fma.f64 x (*.f64 y (*.f64 y x)) (*.f64 (*.f64 z x) (-.f64 (*.f64 z x) (*.f64 y x)))))
(/.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 (*.f64 z x) 3)) (+.f64 (pow.f64 (*.f64 z x) 2) (*.f64 (*.f64 y x) (*.f64 x (-.f64 y z)))))
(pow.f64 (*.f64 x (+.f64 y z)) 1)
(*.f64 (+.f64 y z) x)
(pow.f64 (sqrt.f64 (*.f64 x (+.f64 y z))) 2)
(*.f64 (+.f64 y z) x)
(pow.f64 (cbrt.f64 (*.f64 x (+.f64 y z))) 3)
(*.f64 (+.f64 y z) x)
(pow.f64 (pow.f64 (*.f64 x (+.f64 y z)) 3) 1/3)
(*.f64 (+.f64 y z) x)
(sqrt.f64 (pow.f64 (*.f64 x (+.f64 y z)) 2))
(*.f64 (+.f64 y z) x)
(log.f64 (exp.f64 (*.f64 x (+.f64 y z))))
(*.f64 (+.f64 y z) x)
(cbrt.f64 (pow.f64 (*.f64 x (+.f64 y z)) 3))
(*.f64 (+.f64 y z) x)
(expm1.f64 (log1p.f64 (*.f64 x (+.f64 y z))))
(*.f64 (+.f64 y z) x)
(exp.f64 (log.f64 (*.f64 x (+.f64 y z))))
(*.f64 (+.f64 y z) x)
(exp.f64 (*.f64 (log.f64 (*.f64 x (+.f64 y z))) 1))
(*.f64 (+.f64 y z) x)
(log1p.f64 (expm1.f64 (*.f64 x (+.f64 y z))))
(*.f64 (+.f64 y z) x)

eval21.0ms (0.7%)

Compiler

Compiled 1608 to 536 computations (66.7% saved)

prune22.0ms (0.7%)

Pruning

8 alts after pruning (4 fresh and 4 done)

PrunedKeptTotal
New1344138
Fresh000
Picked011
Done033
Total1348142
Error
0b
Counts
142 → 8
Alt Table
Click to see full alt table
StatusErrorProgram
27.8b
(fma.f64 x y (*.f64 z x))
22.2b
(-.f64 (*.f64 z x) z)
12.9b
(-.f64 (*.f64 y x) z)
0.0b
(-.f64 (*.f64 x (+.f64 y z)) z)
27.8b
(*.f64 (+.f64 y z) x)
49.7b
(*.f64 z x)
40.1b
(*.f64 y x)
34.9b
(neg.f64 z)
Compiler

Compiled 60 to 38 computations (36.7% saved)

localize3.0ms (0.1%)

Compiler

Compiled 6 to 4 computations (33.3% saved)

localize3.0ms (0.1%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize3.0ms (0.1%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize5.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 14 to 5 computations (64.3% saved)

series2.0ms (0.1%)

Counts
1 → 24
Calls

9 calls:

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

rewrite53.0ms (1.8%)

Algorithm
batch-egg-rewrite
Rules
1642×add-sqr-sqrt
1626×*-un-lft-identity
1516×add-cube-cbrt
1496×add-cbrt-cube
158×pow1
Iterations

Useful iterations: 0 (0.0ms)

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

simplify58.0ms (1.9%)

Algorithm
egg-herbie
Rules
1114×fma-def
1018×distribute-lft-out
808×associate-*r*
766×associate-*l*
566×log-prod
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
064625
1151625
2439625
32814625
45999625
Stop Event
node limit
Counts
45 → 29
Calls
Call 1
Inputs
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 z x) (*.f64 y x))
(+.f64 (*.f64 x y) (*.f64 x z))
(+.f64 (*.f64 x z) (*.f64 x y))
(+.f64 (*.f64 y x) (*.f64 z x))
(+.f64 (*.f64 z x) (*.f64 y x))
(-.f64 (exp.f64 (log1p.f64 (*.f64 (+.f64 y z) x))) 1)
(/.f64 (*.f64 x (-.f64 (*.f64 y y) (*.f64 z z))) (-.f64 y z))
(/.f64 (*.f64 x (+.f64 (pow.f64 y 3) (pow.f64 z 3))) (fma.f64 y y (*.f64 z (-.f64 z y))))
(/.f64 (*.f64 (-.f64 (*.f64 y y) (*.f64 z z)) x) (-.f64 y z))
(/.f64 (*.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) x) (fma.f64 y y (*.f64 z (-.f64 z y))))
(pow.f64 (*.f64 (+.f64 y z) x) 1)
(pow.f64 (sqrt.f64 (*.f64 (+.f64 y z) x)) 2)
(pow.f64 (cbrt.f64 (*.f64 (+.f64 y z) x)) 3)
(pow.f64 (pow.f64 (*.f64 (+.f64 y z) x) 3) 1/3)
(sqrt.f64 (pow.f64 (*.f64 (+.f64 y z) x) 2))
(log.f64 (pow.f64 (exp.f64 x) (+.f64 y z)))
(log.f64 (+.f64 1 (expm1.f64 (*.f64 (+.f64 y z) x))))
(cbrt.f64 (pow.f64 (*.f64 (+.f64 y z) x) 3))
(expm1.f64 (log1p.f64 (*.f64 (+.f64 y z) x)))
(exp.f64 (log.f64 (*.f64 (+.f64 y z) x)))
(exp.f64 (*.f64 (log.f64 (*.f64 (+.f64 y z) x)) 1))
(log1p.f64 (expm1.f64 (*.f64 (+.f64 y z) x)))
Outputs
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(*.f64 y x)
(*.f64 x y)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(*.f64 y x)
(*.f64 x y)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(*.f64 y x)
(*.f64 x y)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(*.f64 z x)
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 x y) (*.f64 x z))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 x z) (*.f64 x y))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 y x) (*.f64 z x))
(*.f64 x (+.f64 z y))
(+.f64 (*.f64 z x) (*.f64 y x))
(*.f64 x (+.f64 z y))
(-.f64 (exp.f64 (log1p.f64 (*.f64 (+.f64 y z) x))) 1)
(*.f64 x (+.f64 z y))
(/.f64 (*.f64 x (-.f64 (*.f64 y y) (*.f64 z z))) (-.f64 y z))
(*.f64 x (+.f64 z y))
(/.f64 (*.f64 x (+.f64 (pow.f64 y 3) (pow.f64 z 3))) (fma.f64 y y (*.f64 z (-.f64 z y))))
(/.f64 x (/.f64 (fma.f64 y y (*.f64 z (-.f64 z y))) (+.f64 (pow.f64 y 3) (pow.f64 z 3))))
(/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (/.f64 (fma.f64 z (-.f64 z y) (*.f64 y y)) x))
(/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (/.f64 (fma.f64 z z (*.f64 y (-.f64 y z))) x))
(*.f64 x (/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (fma.f64 z (-.f64 z y) (*.f64 y y))))
(/.f64 (*.f64 (-.f64 (*.f64 y y) (*.f64 z z)) x) (-.f64 y z))
(*.f64 x (+.f64 z y))
(/.f64 (*.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) x) (fma.f64 y y (*.f64 z (-.f64 z y))))
(/.f64 x (/.f64 (fma.f64 y y (*.f64 z (-.f64 z y))) (+.f64 (pow.f64 y 3) (pow.f64 z 3))))
(/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (/.f64 (fma.f64 z (-.f64 z y) (*.f64 y y)) x))
(/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (/.f64 (fma.f64 z z (*.f64 y (-.f64 y z))) x))
(*.f64 x (/.f64 (+.f64 (pow.f64 y 3) (pow.f64 z 3)) (fma.f64 z (-.f64 z y) (*.f64 y y))))
(pow.f64 (*.f64 (+.f64 y z) x) 1)
(*.f64 x (+.f64 z y))
(pow.f64 (sqrt.f64 (*.f64 (+.f64 y z) x)) 2)
(*.f64 x (+.f64 z y))
(pow.f64 (cbrt.f64 (*.f64 (+.f64 y z) x)) 3)
(*.f64 x (+.f64 z y))
(pow.f64 (pow.f64 (*.f64 (+.f64 y z) x) 3) 1/3)
(*.f64 x (+.f64 z y))
(sqrt.f64 (pow.f64 (*.f64 (+.f64 y z) x) 2))
(*.f64 x (+.f64 z y))
(log.f64 (pow.f64 (exp.f64 x) (+.f64 y z)))
(*.f64 x (+.f64 z y))
(log.f64 (+.f64 1 (expm1.f64 (*.f64 (+.f64 y z) x))))
(*.f64 x (+.f64 z y))
(cbrt.f64 (pow.f64 (*.f64 (+.f64 y z) x) 3))
(*.f64 x (+.f64 z y))
(expm1.f64 (log1p.f64 (*.f64 (+.f64 y z) x)))
(*.f64 x (+.f64 z y))
(exp.f64 (log.f64 (*.f64 (+.f64 y z) x)))
(*.f64 x (+.f64 z y))
(exp.f64 (*.f64 (log.f64 (*.f64 (+.f64 y z) x)) 1))
(*.f64 x (+.f64 z y))
(log1p.f64 (expm1.f64 (*.f64 (+.f64 y z) x)))
(*.f64 x (+.f64 z y))

eval4.0ms (0.1%)

Compiler

Compiled 282 to 107 computations (62.1% saved)

prune6.0ms (0.2%)

Pruning

8 alts after pruning (0 fresh and 8 done)

PrunedKeptTotal
New29029
Fresh000
Picked011
Done077
Total29837
Error
0b
Counts
37 → 8
Alt Table
Click to see full alt table
StatusErrorProgram
27.8b
(fma.f64 x y (*.f64 z x))
22.2b
(-.f64 (*.f64 z x) z)
12.9b
(-.f64 (*.f64 y x) z)
0.0b
(-.f64 (*.f64 x (+.f64 y z)) z)
27.8b
(*.f64 (+.f64 y z) x)
49.7b
(*.f64 z x)
40.1b
(*.f64 y x)
34.9b
(neg.f64 z)
Compiler

Compiled 60 to 38 computations (36.7% saved)

regimes27.0ms (0.9%)

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

4 calls:

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

Compiled 80 to 39 computations (51.3% saved)

regimes24.0ms (0.8%)

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

4 calls:

6.0ms
y
6.0ms
(+.f64 (*.f64 x y) (*.f64 (-.f64 x 1) z))
6.0ms
z
5.0ms
x
Results
ErrorSegmentsBranch
0.0b1x
0.0b1y
0.0b1z
0.0b1(+.f64 (*.f64 x y) (*.f64 (-.f64 x 1) z))
Compiler

Compiled 72 to 35 computations (51.4% saved)

regimes51.0ms (1.7%)

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

3 calls:

21.0ms
z
15.0ms
y
13.0ms
x
Results
ErrorSegmentsBranch
0.9b3x
7.9b3y
4.7b5z
Compiler

Compiled 38 to 19 computations (50% saved)

bsearch28.0ms (0.9%)

Algorithm
binary-search
Steps
TimeLeftRight
17.0ms
2.8063131414894227e-14
409608.44045543857
11.0ms
-2428.4452940544916
-47.767587474016516
Results
25.0ms272×body256valid
Compiler

Compiled 324 to 217 computations (33% saved)

regimes53.0ms (1.8%)

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

3 calls:

24.0ms
y
17.0ms
z
11.0ms
x
Results
ErrorSegmentsBranch
8.9b3x
21.2b7y
18.6b5z
Compiler

Compiled 28 to 17 computations (39.3% saved)

bsearch22.0ms (0.7%)

Algorithm
binary-search
Steps
TimeLeftRight
10.0ms
5.00046557477094e-53
1.033596284559388e-52
12.0ms
-1.115107838800246e-67
-1.1440573472139088e-69
Results
20.0ms192×body256valid
Compiler

Compiled 198 to 145 computations (26.8% saved)

regimes48.0ms (1.6%)

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

3 calls:

21.0ms
x
16.0ms
z
10.0ms
y
Results
ErrorSegmentsBranch
18.0b6x
28.5b3y
22.6b5z
Compiler

Compiled 23 to 15 computations (34.8% saved)

bsearch98.0ms (3.3%)

Algorithm
binary-search
Steps
TimeLeftRight
14.0ms
5.745488207141012e+56
1.0595083291552096e+58
8.0ms
5.00046557477094e-53
1.033596284559388e-52
15.0ms
-6.918028173655688e-61
-9.999807704481112e-67
17.0ms
-6.37757816161712e+121
-5.3764368513841215e+119
43.0ms
-2.3010952827574797e+264
-1.7852292017485166e+250
Results
58.0ms608×body256valid
30.0ms332×body256infinite
Compiler

Compiled 536 to 393 computations (26.7% saved)

regimes27.0ms (0.9%)

Accuracy

Total -40.6b remaining (-191.9%)

Threshold costs -40.6b (-191.9%)

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

3 calls:

9.0ms
z
9.0ms
x
8.0ms
y
Results
ErrorSegmentsBranch
21.2b3x
28.5b3y
24.0b3z
Compiler

Compiled 20 to 14 computations (30% saved)

bsearch25.0ms (0.8%)

Algorithm
binary-search
Steps
TimeLeftRight
9.0ms
5.00046557477094e-53
1.033596284559388e-52
16.0ms
-6.918028173655688e-61
-9.999807704481112e-67
Results
23.0ms224×body256valid
Compiler

Compiled 200 to 153 computations (23.5% saved)

simplify9.0ms (0.3%)

Algorithm
egg-herbie
Rules
10×+-commutative
10×*-commutative
sub-neg
if-if-or-not
1-exp
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
053261
176261
280261
381261
Stop Event
done
saturated
Calls
Call 1
Inputs
(fma.f64 x y (*.f64 (+.f64 x -1) z))
(-.f64 (*.f64 x (+.f64 y z)) z)
(if (<=.f64 x -48) (*.f64 (+.f64 y z) x) (if (<=.f64 x 1) (-.f64 (*.f64 y x) z) (*.f64 (+.f64 y z) x)))
(if (<=.f64 x -1942668892225729/60708402882054033466233184588234965832575213720379360039119137804340758912662765568) (*.f64 (+.f64 y z) x) (if (<=.f64 x 3504793066729583/53919893334301279589334030174039261347274288845081144962207220498432) (neg.f64 z) (*.f64 (+.f64 y z) x)))
(if (<=.f64 x -19999999999999998421936661664294053151080855387504444745733035393436825233278672005560948283410708288220728162236284648020809571429082630568562515505514583247285006834145935719548240949300738322281106670384019261349564171109391944306795105153030553600) (*.f64 y x) (if (<=.f64 x -4499999999999999766671944063894435841833317411656104532063605580220905632224126802908872701654665474520332768931991257088) (*.f64 z x) (if (<=.f64 x -524682904356589/1809251394333065553493296640760748560207343510400633813116524750123642650624) (*.f64 y x) (if (<=.f64 x 5499829120098731/53919893334301279589334030174039261347274288845081144962207220498432) (neg.f64 z) (if (<=.f64 x 1519999999999999982890194646610905254954304683119613050880) (*.f64 y x) (*.f64 z x))))))
(if (<=.f64 x -497544133441593/904625697166532776746648320380374280103671755200316906558262375061821325312) (*.f64 y x) (if (<=.f64 x 5499829120098731/53919893334301279589334030174039261347274288845081144962207220498432) (neg.f64 z) (*.f64 y x)))
(neg.f64 z)
Outputs
(fma.f64 x y (*.f64 (+.f64 x -1) z))
(-.f64 (*.f64 x (+.f64 y z)) z)
(if (<=.f64 x -48) (*.f64 (+.f64 y z) x) (if (<=.f64 x 1) (-.f64 (*.f64 y x) z) (*.f64 (+.f64 y z) x)))
(if (or (<=.f64 x -48) (not (<=.f64 x 1))) (*.f64 x (+.f64 y z)) (-.f64 (*.f64 x y) z))
(if (<=.f64 x -1942668892225729/60708402882054033466233184588234965832575213720379360039119137804340758912662765568) (*.f64 (+.f64 y z) x) (if (<=.f64 x 3504793066729583/53919893334301279589334030174039261347274288845081144962207220498432) (neg.f64 z) (*.f64 (+.f64 y z) x)))
(if (or (<=.f64 x -1942668892225729/60708402882054033466233184588234965832575213720379360039119137804340758912662765568) (not (<=.f64 x 3504793066729583/53919893334301279589334030174039261347274288845081144962207220498432))) (*.f64 x (+.f64 y z)) (neg.f64 z))
(if (<=.f64 x -19999999999999998421936661664294053151080855387504444745733035393436825233278672005560948283410708288220728162236284648020809571429082630568562515505514583247285006834145935719548240949300738322281106670384019261349564171109391944306795105153030553600) (*.f64 y x) (if (<=.f64 x -4499999999999999766671944063894435841833317411656104532063605580220905632224126802908872701654665474520332768931991257088) (*.f64 z x) (if (<=.f64 x -524682904356589/1809251394333065553493296640760748560207343510400633813116524750123642650624) (*.f64 y x) (if (<=.f64 x 5499829120098731/53919893334301279589334030174039261347274288845081144962207220498432) (neg.f64 z) (if (<=.f64 x 1519999999999999982890194646610905254954304683119613050880) (*.f64 y x) (*.f64 z x))))))
(if (<=.f64 x -19999999999999998421936661664294053151080855387504444745733035393436825233278672005560948283410708288220728162236284648020809571429082630568562515505514583247285006834145935719548240949300738322281106670384019261349564171109391944306795105153030553600) (*.f64 x y) (if (<=.f64 x -4499999999999999766671944063894435841833317411656104532063605580220905632224126802908872701654665474520332768931991257088) (*.f64 x z) (if (<=.f64 x -524682904356589/1809251394333065553493296640760748560207343510400633813116524750123642650624) (*.f64 x y) (if (<=.f64 x 5499829120098731/53919893334301279589334030174039261347274288845081144962207220498432) (neg.f64 z) (if (<=.f64 x 1519999999999999982890194646610905254954304683119613050880) (*.f64 x y) (*.f64 x z))))))
(if (<=.f64 x -497544133441593/904625697166532776746648320380374280103671755200316906558262375061821325312) (*.f64 y x) (if (<=.f64 x 5499829120098731/53919893334301279589334030174039261347274288845081144962207220498432) (neg.f64 z) (*.f64 y x)))
(if (<=.f64 x -497544133441593/904625697166532776746648320380374280103671755200316906558262375061821325312) (*.f64 x y) (if (<=.f64 x 5499829120098731/53919893334301279589334030174039261347274288845081144962207220498432) (neg.f64 z) (*.f64 x y)))
(neg.f64 z)
Compiler

Compiled 126 to 76 computations (39.7% saved)

soundness107.0ms (3.6%)

Algorithm
egg-herbie
Rules
638×fma-def
270×associate--r+
216×associate-+r+
214×associate-*r*
200×associate-+l+
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
01021
12121
23121
34419
46119
58619
613719
723119
850619
9103119
10165819
11175419
12175919
Stop Event
saturated
Compiler

Compiled 120 to 64 computations (46.7% saved)

end47.0ms (1.6%)

Compiler

Compiled 108 to 49 computations (54.6% saved)

Profiling

Loading profile data...