sqrt A (should all be same)

Time bar (total: 1.6s)

analyze0.0ms (0%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%100%0%0%0%0%0
0%0%100%0%0%0%0%1
100%100%0%0%0%0%0%2
Compiler

Compiled 10 to 5 computations (50% saved)

Precisions
Click to see histograms. Total time spent on operations: 0.0ms
ival-add: 0.0ms (0% of total)
ival-mult: 0.0ms (0% of total)
const: 0.0ms (0% of total)
ival-sqrt: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

sample550.0ms (34.4%)

Results
382.0ms8256×0valid
Precisions
Click to see histograms. Total time spent on operations: 226.0ms
ival-mult: 95.0ms (42.1% of total)
ival-sqrt: 73.0ms (32.4% of total)
ival-add: 48.0ms (21.3% of total)
const: 7.0ms (3.1% of total)
backward-pass: 3.0ms (1.3% of total)
Bogosity

preprocess21.0ms (1.3%)

Algorithm
egg-herbie
Rules
172×fmsub-define
168×fnmadd-define
162×fnmsub-define
112×fma-define
80×sum3-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0910
13210
28010
321410
440910
562710
669410
769710
043
1113
2143
3173
0173
Stop Event
iter limit
saturated
saturated
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
Outputs
(sqrt (+ (* x x) (* x x)))
(hypot.f64 x x)
Call 2
Inputs
(sqrt (+ (* x x) (* x x)))
(sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x))))
(neg (sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x)))))
Outputs
(sqrt (+ (* x x) (* x x)))
(hypot x x)
(sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x))))
(hypot x x)
(neg (sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x)))))
(neg (hypot x x))
Symmetry

(abs x)

explain52.0ms (3.2%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
1510-2(5.61989427618999e-158)(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
00-0-x
00-0-(*.f64 x x)
00-0-(+.f64 (*.f64 x x) (*.f64 x x))
Results
31.0ms512×0valid
Compiler

Compiled 51 to 14 computations (72.5% saved)

Precisions
Click to see histograms. Total time spent on operations: 15.0ms
ival-mult: 7.0ms (47.6% of total)
ival-sqrt: 4.0ms (27.2% of total)
ival-add: 3.0ms (20.4% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

eval0.0ms (0%)

Compiler

Compiled 4 to 2 computations (50% saved)

prune1.0ms (0%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
Compiler

Compiled 4 to 2 computations (50% saved)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 1 expressions of interest:

NewMetricScoreProgram
cost-diff0
(hypot.f64 x x)
Rules
14×*-lowering-*.f32
14×*-lowering-*.f64
*-commutative
+-lowering-+.f64
count-2
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
044
1114
2144
3174
0174
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
x
Outputs
(sqrt (+ (* x x) (* x x)))
(hypot.f64 x x)
x

localize22.0ms (1.4%)

Localize:

Found 1 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(hypot.f64 x x)
Results
16.0ms256×0valid
Compiler

Compiled 6 to 3 computations (50% saved)

Precisions
Click to see histograms. Total time spent on operations: 21.0ms
compiled-spec: 11.0ms (52.6% of total)
ival-mult: 6.0ms (28.7% of total)
ival-sqrt: 2.0ms (9.6% of total)
ival-add: 1.0ms (4.8% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

series1.0ms (0.1%)

Counts
1 → 12
Calls
Call 1
Inputs
#<alt (sqrt (+ (* x x) (* x x)))>
Outputs
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@0
(sqrt (+ (* x x) (* x x)))
0.0ms
x
@inf
(sqrt (+ (* x x) (* x x)))
0.0ms
x
@-inf
(sqrt (+ (* x x) (* x x)))

rewrite59.0ms (3.7%)

Algorithm
batch-egg-rewrite
Rules
66×*-lowering-*.f32
66×*-lowering-*.f64
34×/-lowering-/.f32
34×/-lowering-/.f64
32×pow-lowering-pow.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
043
1233
01723
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
1 → 11
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
Outputs
(exp.f64 (*.f64 (log.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64))) #s(literal 1/2 binary64)))
(hypot.f64 x x)
(sqrt.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (+.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal 0 binary64)) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) (sqrt.f64 (+.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal 0 binary64))))
(/.f64 (sqrt.f64 #s(literal 0 binary64)) (sqrt.f64 #s(literal 0 binary64)))
(pow.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)) #s(literal 1/2 binary64))
(*.f64 (pow.f64 x #s(literal 1/2 binary64)) (pow.f64 (*.f64 #s(literal 2 binary64) x) #s(literal 1/2 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/2 binary64)) (pow.f64 (*.f64 x x) #s(literal 1/2 binary64)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (*.f64 #s(literal 2 binary64) x)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (*.f64 x x)))
(*.f64 (pow.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)) #s(literal 1/4 binary64)) (pow.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)) #s(literal 1/4 binary64)))

simplify8.0ms (0.5%)

Algorithm
egg-herbie
Rules
88×sum3-define
76×fma-define
32×fma-lowering-fma.f32
32×fma-lowering-fma.f64
24×fmsub-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0652
11152
22452
32852
43252
55452
68652
79852
812152
918852
018852
Stop Event
iter limit
saturated
Counts
12 → 12
Calls
Call 1
Inputs
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
Outputs
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (-.f64 #s(literal 0 binary64) x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (-.f64 #s(literal 0 binary64) x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (-.f64 #s(literal 0 binary64) x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (-.f64 #s(literal 0 binary64) x))

eval2.0ms (0.1%)

Compiler

Compiled 149 to 40 computations (73.2% saved)

prune4.0ms (0.3%)

Pruning

2 alts after pruning (1 fresh and 1 done)

PrunedKeptTotal
New22123
Fresh000
Picked011
Done000
Total22224
Accuracy
100.0%
Counts
24 → 2
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Compiler

Compiled 9 to 6 computations (33.3% saved)

simplify3.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 2 expressions of interest:

NewMetricScoreProgram
cost-diff0
(sqrt.f64 #s(literal 2 binary64))
cost-diff0
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Rules
*-lowering-*.f32
*-lowering-*.f64
*-commutative
sqrt-lowering-sqrt.f64
sqrt-lowering-sqrt.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
048
158
058
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* x (sqrt 2))
x
(sqrt 2)
2
Outputs
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
x
(sqrt 2)
(sqrt.f64 #s(literal 2 binary64))
2
#s(literal 2 binary64)

localize19.0ms (1.2%)

Localize:

Found 2 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(sqrt.f64 #s(literal 2 binary64))
accuracy99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Results
12.0ms256×0valid
Compiler

Compiled 10 to 5 computations (50% saved)

Precisions
Click to see histograms. Total time spent on operations: 5.0ms
ival-mult: 2.0ms (42% of total)
ival-sqrt: 2.0ms (42% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

series0.0ms (0%)

Counts
2 → 12
Calls
Call 1
Inputs
#<alt (* x (sqrt 2))>
#<alt (sqrt 2)>
Outputs
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
Calls

3 calls:

TimeVariablePointExpression
0.0ms
x
@-inf
(* x (sqrt 2))
0.0ms
x
@0
(* x (sqrt 2))
0.0ms
x
@inf
(* x (sqrt 2))

rewrite83.0ms (5.2%)

Algorithm
batch-egg-rewrite
Rules
564×*-lowering-*.f32
564×*-lowering-*.f64
202×associate-*r*
150×associate-*l*
148×prod-exp
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
046
176
2146
3346
4846
52206
010246
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
2 → 55
Calls
Call 1
Inputs
(* x (sqrt 2))
(sqrt 2)
Outputs
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64))))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64)) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64))))
(*.f64 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64))))
(*.f64 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64)) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64))))
(*.f64 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/32 binary64)) (*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/32 binary64)) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64)))))
(*.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) (*.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) x))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 3/16 binary64)) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 5/16 binary64))))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64)) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64))))
(*.f64 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64)))
(*.f64 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 5/16 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 3/16 binary64)))
(*.f64 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 3/16 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 5/16 binary64)))
(*.f64 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 5/16 binary64)) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 3/16 binary64))))
(*.f64 (*.f64 x (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64))))) (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))))
(*.f64 (*.f64 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 1/32 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 1/32 binary64)))
(exp.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))
(exp.f64 (*.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)) #s(literal 1 binary64)))
(exp.f64 (*.f64 (log.f64 #s(literal 16 binary64)) #s(literal 1/8 binary64)))
(sqrt.f64 #s(literal 2 binary64))
(pow.f64 #s(literal 2 binary64) #s(literal 1/2 binary64))
(pow.f64 (sqrt.f64 #s(literal 2 binary64)) #s(literal 1 binary64))
(pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) #s(literal 2 binary64))
(pow.f64 #s(literal 4 binary64) #s(literal 1/4 binary64))
(pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64)) #s(literal 4 binary64))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 #s(literal 2 binary64)))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1 binary64)))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (+.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64))))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (*.f64 #s(literal 2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64))))
(pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)) #s(literal 8 binary64))
(pow.f64 #s(literal 16 binary64) #s(literal 1/8 binary64))
(pow.f64 (exp.f64 #s(literal 1/4 binary64)) (log.f64 #s(literal 4 binary64)))
(pow.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) #s(literal 2 binary64))
(pow.f64 (*.f64 (exp.f64 #s(literal 1/4 binary64)) (exp.f64 #s(literal 1/4 binary64))) (log.f64 #s(literal 2 binary64)))
(pow.f64 (*.f64 (exp.f64 #s(literal 1/2 binary64)) (exp.f64 #s(literal 1/2 binary64))) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))
(pow.f64 (exp.f64 #s(literal 2 binary64)) (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/4 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64)) (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64)) #s(literal 1 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/32 binary64)) (*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/32 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64))))
(*.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 3/16 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 5/16 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 5/16 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 3/16 binary64)))
(*.f64 (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)) #s(literal 1 binary64)) (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64)) #s(literal 1 binary64)))
(*.f64 (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64)) #s(literal 1 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64)))
(*.f64 (pow.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) #s(literal 1 binary64)) (pow.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) #s(literal 1 binary64)))
(*.f64 (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64)) #s(literal 1 binary64)) (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)) #s(literal 1 binary64)))
(*.f64 (*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 7/16 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 1/32 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 1/32 binary64)))

simplify4.0ms (0.3%)

Algorithm
egg-herbie
Rules
*-lowering-*.f32
*-lowering-*.f64
*-commutative
sqrt-lowering-sqrt.f64
sqrt-lowering-sqrt.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0448
1548
0548
Stop Event
iter limit
saturated
Counts
12 → 12
Calls
Call 1
Inputs
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
Outputs
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))

eval7.0ms (0.4%)

Compiler

Compiled 562 to 147 computations (73.8% saved)

prune9.0ms (0.5%)

Pruning

3 alts after pruning (1 fresh and 2 done)

PrunedKeptTotal
New66167
Fresh000
Picked011
Done011
Total66369
Accuracy
100.0%
Counts
69 → 3
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.1%
(*.f64 x (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) #s(literal 2 binary64)))
99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Compiler

Compiled 17 to 12 computations (29.4% saved)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64))
cost-diff6528
(pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) #s(literal 2 binary64))
cost-diff6528
(*.f64 x (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) #s(literal 2 binary64)))
Rules
14×*-lowering-*.f32
14×*-lowering-*.f64
*-commutative
pow-lowering-pow.f64
pow-lowering-pow.f32
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
0618
1814
21612
31812
01812
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* x (pow (pow 2 1/4) 2))
x
(pow (pow 2 1/4) 2)
(pow 2 1/4)
2
1/4
Outputs
(* x (pow (pow 2 1/4) 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
x
(pow (pow 2 1/4) 2)
(sqrt.f64 #s(literal 2 binary64))
(pow 2 1/4)
(pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64))
2
#s(literal 2 binary64)
1/4
#s(literal 1/4 binary64)

localize38.0ms (2.4%)

Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64))
accuracy99.3%
(*.f64 x (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) #s(literal 2 binary64)))
accuracy98.4%
(pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) #s(literal 2 binary64))
Results
26.0ms256×0valid
Compiler

Compiled 20 to 7 computations (65% saved)

Precisions
Click to see histograms. Total time spent on operations: 17.0ms
ival-pow: 14.0ms (83.6% of total)
ival-mult: 2.0ms (11.9% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

series0.0ms (0%)

Counts
3 → 12
Calls
Call 1
Inputs
#<alt (* x (pow (pow 2 1/4) 2))>
#<alt (pow (pow 2 1/4) 2)>
#<alt (pow 2 1/4)>
Outputs
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
Calls

3 calls:

TimeVariablePointExpression
0.0ms
x
@0
(* x (pow (pow 2 1/4) 2))
0.0ms
x
@inf
(* x (pow (pow 2 1/4) 2))
0.0ms
x
@-inf
(* x (pow (pow 2 1/4) 2))

rewrite44.0ms (2.7%)

Algorithm
batch-egg-rewrite
Rules
132×associate-*r*
118×prod-exp
112×associate-*l*
110×prod-diff
78×unpow-prod-down
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
0611
1258
2848
32765
016225
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
3 → 6
Calls
Call 1
Inputs
(* x (pow (pow 2 1/4) 2))
(pow (pow 2 1/4) 2)
(pow 2 1/4)
Outputs
(*.f64 x #s(literal 1 binary64))
(*.f64 #s(literal 1 binary64) x)
(*.f64 #s(literal 1 binary64) (*.f64 x #s(literal 1 binary64)))
(*.f64 (*.f64 x #s(literal 1 binary64)) #s(literal 1 binary64))
#s(literal 1 binary64)
#s(literal 1 binary64)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Rules
*-lowering-*.f32
*-lowering-*.f64
*-commutative
sqrt-lowering-sqrt.f64
sqrt-lowering-sqrt.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0448
1548
0548
Stop Event
iter limit
saturated
Counts
12 → 12
Calls
Call 1
Inputs
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
Outputs
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))

eval2.0ms (0.1%)

Compiler

Compiled 73 to 11 computations (84.9% saved)

prune2.0ms (0.1%)

Pruning

4 alts after pruning (1 fresh and 3 done)

PrunedKeptTotal
New17118
Fresh000
Picked011
Done022
Total17421
Accuracy
100.0%
Counts
21 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.1%
(*.f64 x (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) #s(literal 2 binary64)))
99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
20.3%
(*.f64 x #s(literal 1 binary64))
Compiler

Compiled 21 to 15 computations (28.6% saved)

simplify3.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 1 expressions of interest:

NewMetricScoreProgram
cost-diff128
(*.f64 x #s(literal 1 binary64))
Rules
*-lowering-*.f32
*-lowering-*.f64
*-commutative
*-rgt-identity
1-exp
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
033
163
273
073
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* x 1)
x
1
Outputs
(* x 1)
x
x
1
#s(literal 1 binary64)

localize19.0ms (1.2%)

Localize:

Found 1 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 x #s(literal 1 binary64))
Results
15.0ms256×0valid
Compiler

Compiled 7 to 4 computations (42.9% saved)

Precisions
Click to see histograms. Total time spent on operations: 2.0ms
ival-mult: 2.0ms (83.1% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

series3.0ms (0.2%)

Counts
1 → 12
Calls
Call 1
Inputs
#<alt (* x 1)>
Outputs
#<alt x>
#<alt x>
#<alt x>
#<alt x>
#<alt x>
#<alt x>
#<alt x>
#<alt x>
#<alt x>
#<alt x>
#<alt x>
#<alt x>
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@-inf
(* x 1)
0.0ms
x
@inf
(* x 1)
0.0ms
x
@0
(* x 1)

rewrite9.0ms (0.6%)

Algorithm
batch-egg-rewrite
Rules
*-lowering-*.f32
*-lowering-*.f64
*-commutative
*-rgt-identity
1-exp
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
031
161
271
071
Stop Event
iter limit
saturated
Counts
1 → 3
Calls
Call 1
Inputs
(* x 1)
Outputs
x
(*.f64 x #s(literal 1 binary64))
(*.f64 #s(literal 1 binary64) x)

simplify3.0ms (0.2%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0112
0112
Stop Event
saturated
saturated
Counts
12 → 12
Calls
Call 1
Inputs
x
x
x
x
x
x
x
x
x
x
x
x
Outputs
x
x
x
x
x
x
x
x
x
x
x
x

eval1.0ms (0.1%)

Compiler

Compiled 20 to 4 computations (80% saved)

prune3.0ms (0.2%)

Pruning

4 alts after pruning (1 fresh and 3 done)

PrunedKeptTotal
New14115
Fresh000
Picked101
Done033
Total15419
Accuracy
100.0%
Counts
19 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.1%
(*.f64 x (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) #s(literal 2 binary64)))
99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
20.3%
x
Compiler

Compiled 46 to 27 computations (41.3% saved)

regimes13.0ms (0.8%)

Counts
6 → 1
Calls
Call 1
Inputs
x
(*.f64 x #s(literal 1 binary64))
(hypot.f64 x x)
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(*.f64 x (pow.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) #s(literal 2 binary64)))
Outputs
(hypot.f64 x x)
Calls

4 calls:

5.0ms
(*.f64 x x)
2.0ms
x
2.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
2.0ms
(+.f64 (*.f64 x x) (*.f64 x x))
Results
AccuracySegmentsBranch
100.0%1x
100.0%1(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
100.0%1(+.f64 (*.f64 x x) (*.f64 x x))
100.0%1(*.f64 x x)
Compiler

Compiled 23 to 10 computations (56.5% saved)

regimes2.0ms (0.1%)

Accuracy

Total 0.0b remaining (0%)

Threshold costs 0b (0%)

Counts
2 → 1
Calls
Call 1
Inputs
x
(*.f64 x #s(literal 1 binary64))
Outputs
x
Calls

1 calls:

1.0ms
x
Results
AccuracySegmentsBranch
20.3%1x
Compiler

Compiled 2 to 1 computations (50% saved)

simplify8.0ms (0.5%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
024
Stop Event
saturated
Calls
Call 1
Inputs
(hypot.f64 x x)
x
Outputs
(hypot.f64 x x)
x

soundness573.0ms (35.8%)

Rules
564×*-lowering-*.f32
564×*-lowering-*.f64
202×associate-*r*
150×associate-*l*
148×prod-exp
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0611
1258
2848
32765
016225
0652
11152
22452
32852
43252
55452
68652
79852
812152
918852
018852
043
1113
2143
3173
0173
031
161
271
071
046
176
2146
3346
4846
52206
010246
Stop Event
fuel
iter limit
iter limit
iter limit
unsound
iter limit
saturated
iter limit
saturated
iter limit
saturated
iter limit
iter limit
iter limit
unsound
Compiler

Compiled 28 to 17 computations (39.3% saved)

preprocess22.0ms (1.4%)

Remove

(abs x)

Compiler

Compiled 44 to 20 computations (54.5% saved)

end0.0ms (0%)

Profiling

Loading profile data...