sqrt A (should all be same)

Time bar (total: 1.3s)

analyze0.0ms (0%)

Memory
0.3MiB live, 0.3MiB allocated
Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%100%0%0%0%0%0
100%100%0%0%0%0%0%1
Compiler

Compiled 10 to 4 computations (60% saved)

sample690.0ms (52.9%)

Memory
-7.9MiB live, 721.0MiB allocated
Samples
559.0ms8 256×0valid
Precisions
Click to see histograms. Total time spent on operations: 157.0ms
ival-hypot: 148.0ms (94% of total)
ival-true: 6.0ms (3.8% of total)
ival-assert: 3.0ms (1.9% of total)
Bogosity

preprocess18.0ms (1.4%)

Memory
-7.2MiB live, 28.2MiB allocated
Algorithm
egg-herbie
Rules
40×associate-*r*
34×sub-neg
28×distribute-lft-neg-in
24×neg-sub0
22×distribute-lft-in
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0919
12519
26819
316619
424319
525419
625619
046
186
2116
3146
0143
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)))
(sqrt (* x (+ x x)))
(sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x))))
(sqrt (* x (+ x x)))
(neg (sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x)))))
(neg (sqrt (* x (+ x x))))
Symmetry

(abs x)

explain72.0ms (5.5%)

Memory
-7.1MiB live, 146.9MiB allocated
FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
1170-9(1.7010306538644048e-159)(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
00-0-(+.f64 (*.f64 x x) (*.f64 x x))
00-0-(*.f64 x x)
00-0-x
Explanations
Click to see full explanations table
OperatorSubexpressionExplanationCount
sqrt.f64(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))uflow-rescue570
(+.f64 (*.f64 x x) (*.f64 x x))underflow57
(*.f64 x x)underflow114
sqrt.f64(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))oflow-rescue510
(+.f64 (*.f64 x x) (*.f64 x x))overflow51
(*.f64 x x)overflow102
Confusion
Predicted +Predicted -
+1089
-0139
Precision
1.0
Recall
0.9230769230769231
Confusion?
Predicted +Predicted MaybePredicted -
+10809
-00139
Precision?
1.0
Recall?
0.9230769230769231
Freqs
test
numberfreq
0148
1108
Total Confusion?
Predicted +Predicted MaybePredicted -
+100
-000
Precision?
1.0
Recall?
1.0
Samples
34.0ms512×0valid
Compiler

Compiled 60 to 20 computations (66.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 24.0ms
ival-mult: 11.0ms (45.3% of total)
ival-hypot: 11.0ms (45.3% of total)
ival-add: 2.0ms (8.2% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

eval0.0ms (0%)

Memory
0.5MiB live, 0.5MiB allocated
Compiler

Compiled 1 to 1 computations (0% saved)

prune1.0ms (0%)

Memory
1.5MiB live, 1.5MiB allocated
Alt Table
Click to see full alt table
StatusAccuracyProgram
59.1%
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Compiler

Compiled 9 to 4 computations (55.6% saved)

simplify3.0ms (0.3%)

Memory
9.4MiB live, 9.4MiB allocated
Algorithm
egg-herbie
Localize:

Found 3 expressions of interest:

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

Useful iterations: 0 (0.0ms)

IterNodesCost
0415
1815
21115
31415
01412
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
(+ (* x x) (* x x))
(* x x)
x
Outputs
(sqrt (+ (* x x) (* x x)))
(hypot.f64 x x)
(+ (* x x) (* x x))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* x x)
(*.f64 x x)
x

localize19.0ms (1.5%)

Memory
5.1MiB live, 43.8MiB allocated
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 x x)
accuracy100.0%
(+.f64 (*.f64 x x) (*.f64 x x))
accuracy59.1%
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Samples
13.0ms256×0valid
Compiler

Compiled 21 to 6 computations (71.4% saved)

Precisions
Click to see histograms. Total time spent on operations: 8.0ms
ival-hypot: 5.0ms (60.7% of total)
ival-mult: 2.0ms (24.3% of total)
ival-add: 1.0ms (12.1% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series3.0ms (0.2%)

Memory
7.2MiB live, 7.2MiB allocated
Counts
3 → 36
Calls
Call 1
Inputs
#<alt (sqrt (+ (* x x) (* x x)))>
#<alt (+ (* x x) (* x x))>
#<alt (* 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)))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
Calls

9 calls:

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

rewrite39.0ms (3%)

Memory
-16.8MiB live, 65.0MiB allocated
Algorithm
batch-egg-rewrite
Rules
66×*-lowering-*.f32
66×*-lowering-*.f64
42×accelerator-lowering-fma.f32
42×accelerator-lowering-fma.f64
34×/-lowering-/.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0414
12010
01579
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
3 → 33
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
(+ (* x x) (* 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)
(hypot.f64 x (pow.f64 x #s(literal 1 binary64)))
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) x)
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))
(sqrt.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) (sqrt.f64 (+.f64 (*.f64 (*.f64 x 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)))
(+.f64 (*.f64 x x) (*.f64 x x))
(-.f64 (/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)))
(fma.f64 x x (*.f64 x x))
(fma.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)) (*.f64 x x))
(/.f64 (*.f64 (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64))) (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (neg.f64 (*.f64 (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) (neg.f64 (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64))))
(/.f64 #s(literal 1 binary64) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))
(/.f64 #s(literal 1 binary64) (/.f64 (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (*.f64 (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(*.f64 (*.f64 (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64))) (/.f64 #s(literal 1 binary64) (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64))))
(*.f64 #s(literal 0 binary64) (/.f64 #s(literal 1 binary64) #s(literal 0 binary64)))
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
(exp.f64 (*.f64 (log.f64 x) #s(literal 2 binary64)))
(pow.f64 x #s(literal 2 binary64))
(*.f64 x x)
(*.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))

simplify9.0ms (0.7%)

Memory
-20.6MiB live, 18.5MiB allocated
Algorithm
egg-herbie
Rules
38×*-lowering-*.f32
38×*-lowering-*.f64
38×accelerator-lowering-fma.f32
38×accelerator-lowering-fma.f64
36×+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
08148
115148
232148
338148
442148
554148
666148
777148
897148
9102148
0102148
Stop Event
iter limit
saturated
Counts
36 → 36
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)))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 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 #s(literal 0 binary64) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(-.f64 #s(literal 0 binary64) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(-.f64 #s(literal 0 binary64) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(-.f64 #s(literal 0 binary64) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)

eval8.0ms (0.6%)

Memory
20.3MiB live, 20.3MiB allocated
Compiler

Compiled 694 to 97 computations (86% saved)

prune5.0ms (0.4%)

Memory
13.5MiB live, 13.5MiB allocated
Pruning

3 alts after pruning (3 fresh and 0 done)

PrunedKeptTotal
New82385
Fresh000
Picked101
Done000
Total83386
Accuracy
100.0%
Counts
86 → 3
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.4%
(*.f64 (sqrt.f64 x) (sqrt.f64 (*.f64 #s(literal 2 binary64) x)))
99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Compiler

Compiled 17 to 12 computations (29.4% saved)

simplify5.0ms (0.4%)

Memory
-31.6MiB live, 7.5MiB allocated
Algorithm
egg-herbie
Localize:

Found 7 expressions of interest:

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

Useful iterations: 0 (0.0ms)

IterNodesCost
01133
11733
22033
02030
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* x (sqrt 2))
x
(sqrt 2)
2
(* (sqrt x) (sqrt (* 2 x)))
(sqrt x)
x
(sqrt (* 2 x))
(* 2 x)
2
(sqrt (+ (* x x) (* x x)))
x
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)
(* (sqrt x) (sqrt (* 2 x)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (*.f64 x #s(literal 2 binary64))))
(sqrt x)
(sqrt.f64 x)
x
(sqrt (* 2 x))
(sqrt.f64 (*.f64 x #s(literal 2 binary64)))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
2
#s(literal 2 binary64)
(sqrt (+ (* x x) (* x x)))
(hypot.f64 x x)
x

localize32.0ms (2.5%)

Memory
26.7MiB live, 65.5MiB allocated
Localize:

Found 7 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(hypot.f64 x x)
accuracy100.0%
(*.f64 #s(literal 2 binary64) x)
accuracy100.0%
(sqrt.f64 (*.f64 #s(literal 2 binary64) x))
accuracy100.0%
(sqrt.f64 x)
accuracy99.4%
(*.f64 (sqrt.f64 x) (sqrt.f64 (*.f64 #s(literal 2 binary64) x)))
accuracy100.0%
(sqrt.f64 #s(literal 2 binary64))
accuracy99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Samples
22.0ms256×0valid
Compiler

Compiled 32 to 11 computations (65.6% saved)

Precisions
Click to see histograms. Total time spent on operations: 13.0ms
ival-sqrt: 5.0ms (37.5% of total)
ival-mult: 4.0ms (30% of total)
ival-hypot: 4.0ms (30% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series5.0ms (0.3%)

Memory
10.9MiB live, 10.9MiB allocated
Counts
7 → 72
Calls
Call 1
Inputs
#<alt (* x (sqrt 2))>
#<alt (sqrt 2)>
#<alt (* (sqrt x) (sqrt (* 2 x)))>
#<alt (sqrt x)>
#<alt (sqrt (* 2 x))>
#<alt (* 2 x)>
#<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 (* 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))>
#<alt (* -1 (* x (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* x (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* x (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* x (* (sqrt -2) (sqrt -1))))>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<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

18 calls:

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

rewrite38.0ms (2.9%)

Memory
-41.4MiB live, 52.7MiB allocated
Algorithm
batch-egg-rewrite
Rules
92×*-lowering-*.f32
92×*-lowering-*.f64
42×accelerator-lowering-fma.f32
42×accelerator-lowering-fma.f64
38×pow-lowering-pow.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01127
13523
018821
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
7 → 51
Calls
Call 1
Inputs
(* x (sqrt 2))
(sqrt 2)
(* (sqrt x) (sqrt (* 2 x)))
(sqrt x)
(sqrt (* 2 x))
(* 2 x)
(sqrt (+ (* x x) (* x x)))
Outputs
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
(sqrt.f64 #s(literal 2 binary64))
(pow.f64 #s(literal 2 binary64) #s(literal 1/2 binary64))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)))
(exp.f64 (*.f64 (log.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64))) #s(literal 1/2 binary64)))
(hypot.f64 x x)
(hypot.f64 x (pow.f64 x #s(literal 1 binary64)))
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) x)
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))
(sqrt.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) (sqrt.f64 (+.f64 (*.f64 (*.f64 x 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 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 (*.f64 x x) #s(literal 1/2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (*.f64 x x)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (*.f64 (sqrt.f64 x) (sqrt.f64 x)))
(*.f64 (sqrt.f64 x) (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/2 binary64)))
(*.f64 (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/2 binary64)) (sqrt.f64 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)))
(exp.f64 (*.f64 (log.f64 x) #s(literal 1/2 binary64)))
(sqrt.f64 x)
(pow.f64 x #s(literal 1/2 binary64))
(*.f64 (pow.f64 x #s(literal 1/4 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(exp.f64 (*.f64 (log.f64 (*.f64 x #s(literal 2 binary64))) #s(literal 1/2 binary64)))
(sqrt.f64 (*.f64 x #s(literal 2 binary64)))
(pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/2 binary64))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/4 binary64)) (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/4 binary64)))
(+.f64 x x)
(/.f64 #s(literal 0 binary64) (-.f64 x x))
(/.f64 (+.f64 (pow.f64 x #s(literal 3 binary64)) (pow.f64 x #s(literal 3 binary64))) (+.f64 (*.f64 x x) #s(literal 0 binary64)))
(*.f64 x #s(literal 2 binary64))
(*.f64 #s(literal 2 binary64) x)
(exp.f64 (*.f64 (log.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64))) #s(literal 1/2 binary64)))
(hypot.f64 x x)
(hypot.f64 x (pow.f64 x #s(literal 1 binary64)))
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) x)
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))
(sqrt.f64 (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 #s(literal 0 binary64) #s(literal 0 binary64)))) (sqrt.f64 (+.f64 (*.f64 (*.f64 x 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 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 (*.f64 x x) #s(literal 1/2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (*.f64 x x)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (*.f64 (sqrt.f64 x) (sqrt.f64 x)))
(*.f64 (sqrt.f64 x) (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/2 binary64)))
(*.f64 (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/2 binary64)) (sqrt.f64 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)))

simplify138.0ms (10.6%)

Memory
22.9MiB live, 98.8MiB allocated
Algorithm
egg-herbie
Rules
1 144×associate-*r*
944×*-lowering-*.f32
944×*-lowering-*.f64
944×accelerator-lowering-fma.f32
944×accelerator-lowering-fma.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
020300
146300
2130300
3257300
4484300
5800300
61324300
71450300
81502300
91526300
101645300
111836300
121876300
131904300
141908300
151908300
162110300
172214300
182832300
193146300
203158300
03158300
Stop Event
iter limit
saturated
Counts
72 → 72
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))
(* 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) (sqrt -1))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 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)))
(* 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)))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(-.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(-.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(-.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(-.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(-.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(-.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(-.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(-.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #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)))
(* -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))

eval29.0ms (2.2%)

Memory
-17.9MiB live, 23.3MiB allocated
Compiler

Compiled 861 to 103 computations (88% saved)

prune5.0ms (0.4%)

Memory
13.4MiB live, 13.4MiB allocated
Pruning

3 alts after pruning (1 fresh and 2 done)

PrunedKeptTotal
New1221123
Fresh000
Picked123
Done000
Total1233126
Accuracy
100.0%
Counts
126 → 3
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)))
99.1%
(*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))))
Compiler

Compiled 17 to 13 computations (23.5% saved)

simplify4.0ms (0.3%)

Memory
5.9MiB live, 5.9MiB allocated
Algorithm
egg-herbie
Localize:

Found 4 expressions of interest:

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

Useful iterations: 1 (0.0ms)

IterNodesCost
0717
11215
21615
01615
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* x (exp (* (log 2) 1/2)))
x
(exp (* (log 2) 1/2))
(* (log 2) 1/2)
(log 2)
2
1/2
Outputs
(* x (exp (* (log 2) 1/2)))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
x
(exp (* (log 2) 1/2))
(sqrt.f64 #s(literal 2 binary64))
(* (log 2) 1/2)
(*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))
(log 2)
(log.f64 #s(literal 2 binary64))
2
#s(literal 2 binary64)
1/2
#s(literal 1/2 binary64)

localize26.0ms (2%)

Memory
0.5MiB live, 38.2MiB allocated
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))
accuracy100.0%
(log.f64 #s(literal 2 binary64))
accuracy99.3%
(*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))))
accuracy98.4%
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
Samples
17.0ms256×0valid
Compiler

Compiled 23 to 9 computations (60.9% saved)

Precisions
Click to see histograms. Total time spent on operations: 10.0ms
ival-log: 3.0ms (31.5% of total)
ival-exp: 3.0ms (31.5% of total)
ival-mult: 3.0ms (31.5% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series0.0ms (0%)

Memory
0.6MiB live, 0.6MiB allocated
Counts
4 → 12
Calls
Call 1
Inputs
#<alt (exp (* (log 2) 1/2))>
#<alt (* x (exp (* (log 2) 1/2)))>
#<alt (* (log 2) 1/2)>
#<alt (log 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
@0
(* x (exp (* (log 2) 1/2)))
0.0ms
x
@inf
(* x (exp (* (log 2) 1/2)))
0.0ms
x
@-inf
(* x (exp (* (log 2) 1/2)))

rewrite53.0ms (4%)

Memory
-10.4MiB live, 62.4MiB allocated
Algorithm
batch-egg-rewrite
Rules
264×*-lowering-*.f32
264×*-lowering-*.f64
84×pow-lowering-pow.f64
84×pow-lowering-pow.f32
78×/-lowering-/.f32
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0714
11212
22312
34512
411412
040912
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
4 → 63
Calls
Call 1
Inputs
(exp (* (log 2) 1/2))
(* x (exp (* (log 2) 1/2)))
(* (log 2) 1/2)
(log 2)
Outputs
(exp.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 2 binary64)))
(exp.f64 (*.f64 #s(literal 1/4 binary64) (log.f64 #s(literal 4 binary64))))
(exp.f64 (*.f64 #s(literal 1/2 binary64) (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1 binary64))))
(exp.f64 (*.f64 (log.f64 (exp.f64 #s(literal 1 binary64))) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 2 binary64))))
(sqrt.f64 #s(literal 2 binary64))
(pow.f64 (sqrt.f64 #s(literal 2 binary64)) #s(literal 1 binary64))
(pow.f64 #s(literal 2 binary64) #s(literal 1/2 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 (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 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 2 binary64)))
(pow.f64 (pow.f64 (exp.f64 #s(literal 1 binary64)) (log.f64 #s(literal 2 binary64))) #s(literal 1/2 binary64))
(pow.f64 (pow.f64 (exp.f64 #s(literal 1 binary64)) #s(literal 1/2 binary64)) (log.f64 #s(literal 2 binary64)))
(pow.f64 #s(literal 16 binary64) #s(literal 1/8 binary64))
(pow.f64 (exp.f64 (log.f64 #s(literal 4 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/16 binary64)) (*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64))))
(*.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))) (*.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))) (pow.f64 #s(literal 2 binary64) #s(literal 1/4 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 (exp.f64 #s(literal 1/2 binary64)) (/.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1 binary64)) #s(literal 2 binary64))) (pow.f64 (exp.f64 #s(literal 1/2 binary64)) (/.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1 binary64)) #s(literal 2 binary64))))
(*.f64 (*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64))))) (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))))
(*.f64 (*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(*.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 (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64)))))
(*.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))) (*.f64 (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))) (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 1/4 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 (*.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 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64))) (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64))))) (exp.f64 (*.f64 #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))))
(*.f64 (*.f64 (*.f64 x (pow.f64 #s(literal 2 binary64) #s(literal 3/8 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64))) (pow.f64 #s(literal 2 binary64) #s(literal 1/16 binary64)))
(+.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))
(fma.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/4 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))
(fma.f64 #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 2 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))
(fma.f64 #s(literal 2 binary64) (log.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/8 binary64))) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))
(fma.f64 #s(literal 1/4 binary64) (log.f64 #s(literal 2 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))
(fma.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 2 binary64)) #s(literal 1/2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))
(fma.f64 #s(literal 1/8 binary64) (log.f64 #s(literal 4 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))
(neg.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal -2 binary64)))
(/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 2 binary64))
(/.f64 (log.f64 #s(literal 1/2 binary64)) #s(literal -2 binary64))
(/.f64 #s(literal 1 binary64) (/.f64 #s(literal 2 binary64) (log.f64 #s(literal 2 binary64))))
(/.f64 #s(literal 1 binary64) (/.f64 (/.f64 #s(literal 2 binary64) (log.f64 #s(literal 2 binary64))) #s(literal 1 binary64)))
(/.f64 #s(literal -1 binary64) (neg.f64 (/.f64 #s(literal 2 binary64) (log.f64 #s(literal 2 binary64)))))
(/.f64 (neg.f64 (log.f64 #s(literal 1/2 binary64))) #s(literal 2 binary64))
(/.f64 (+.f64 (pow.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) #s(literal 3 binary64)) (pow.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) #s(literal 3 binary64))) (+.f64 (*.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64))) (-.f64 (*.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64))) (*.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64))))))
(/.f64 (-.f64 (*.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64))) (*.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))) (-.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64))))
(pow.f64 (/.f64 #s(literal 2 binary64) (log.f64 #s(literal 2 binary64))) #s(literal -1 binary64))
(*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))
(*.f64 #s(literal 1/2 binary64) (log.f64 #s(literal 2 binary64)))
(*.f64 #s(literal 2 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)))
(*.f64 #s(literal 1/4 binary64) (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 2 binary64)))
(*.f64 #s(literal 1/4 binary64) (+.f64 (log.f64 #s(literal 2 binary64)) (log.f64 #s(literal 2 binary64))))
(*.f64 (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 4 binary64)) #s(literal 2 binary64))
(*.f64 (log.f64 #s(literal 1/2 binary64)) #s(literal -1/2 binary64))
(*.f64 #s(literal 1 binary64) (/.f64 (log.f64 #s(literal 2 binary64)) #s(literal 2 binary64)))
(log.f64 #s(literal 2 binary64))

simplify4.0ms (0.3%)

Memory
7.4MiB live, 7.4MiB allocated
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)))

eval8.0ms (0.6%)

Memory
17.0MiB live, 17.0MiB allocated
Compiler

Compiled 723 to 195 computations (73% saved)

prune29.0ms (2.2%)

Memory
-29.8MiB live, 13.2MiB allocated
Pruning

3 alts after pruning (0 fresh and 3 done)

PrunedKeptTotal
New75075
Fresh000
Picked011
Done022
Total75378
Accuracy
100.0%
Counts
78 → 3
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)))
99.1%
(*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))))
Compiler

Compiled 47 to 30 computations (36.2% saved)

regimes9.0ms (0.7%)

Memory
12.1MiB live, 12.1MiB allocated
Accuracy

Total -26.6b remaining (-85044.2%)

Threshold costs -26.6b (-85044.2%)

Counts
5 → 1
Calls
Call 1
Inputs
(hypot.f64 x x)
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))))
(*.f64 (sqrt.f64 x) (sqrt.f64 (*.f64 #s(literal 2 binary64) x)))
Outputs
(hypot.f64 x x)
Calls

4 calls:

2.0ms
x
2.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
2.0ms
(+.f64 (*.f64 x x) (*.f64 x x))
2.0ms
(*.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)

simplify7.0ms (0.5%)

Memory
12.0MiB live, 12.0MiB allocated
Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

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

soundness27.0ms (2%)

Memory
-14.8MiB live, 24.0MiB allocated
Rules
66×*-lowering-*.f32
66×*-lowering-*.f64
42×accelerator-lowering-fma.f32
42×accelerator-lowering-fma.f64
34×/-lowering-/.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0414
12010
01579
Stop Event
done
iter limit
iter limit
iter limit
unsound
Compiler

Compiled 8 to 4 computations (50% saved)

preprocess18.0ms (1.4%)

Memory
9.5MiB live, 46.9MiB allocated
Remove

(abs x)

Compiler

Compiled 34 to 16 computations (52.9% saved)

end0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated

Profiling

Loading profile data...