sqrt E (should all be same)

Time bar (total: 2.4s)

analyze0.0ms (0%)

Memory
0.4MiB live, 0.4MiB 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 6 computations (40% saved)

sample497.0ms (20.8%)

Memory
21.9MiB live, 704.0MiB allocated
Samples
354.0ms8 256×0valid
Precisions
Click to see histograms. Total time spent on operations: 195.0ms
ival-pow2: 92.0ms (47.2% of total)
ival-sqrt: 55.0ms (28.2% of total)
ival-add: 40.0ms (20.5% of total)
ival-true: 5.0ms (2.6% of total)
ival-assert: 3.0ms (1.5% of total)
Bogosity

preprocess15.0ms (0.6%)

Memory
18.7MiB live, 18.7MiB allocated
Algorithm
egg-herbie
Rules
58×associate-*r*
54×unsub-neg
38×distribute-rgt-neg-out
38×distribute-lft-neg-out
38×associate-*l*
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0715
11513
23513
314613
428613
531313
631513
056
176
2126
3156
0153
Stop Event
iter limit
saturated
saturated
Calls
Call 1
Inputs
(sqrt (+ (pow x 2) (pow x 2)))
Outputs
(sqrt (+ (pow x 2) (pow x 2)))
(sqrt.f64 (*.f64 x (+.f64 x x)))

explain84.0ms (3.5%)

Memory
-19.5MiB live, 112.9MiB allocated
FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
1270-1(-1.1434135325736018e-156)(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
00-0-(pow.f64 x #s(literal 2 binary64))
00-0-#s(literal 2 binary64)
00-0-(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
00-0-x
Explanations
Click to see full explanations table
OperatorSubexpressionExplanationCount
sqrt.f64(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))oflow-rescue760
(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))overflow76
(pow.f64 x #s(literal 2 binary64))overflow152
sqrt.f64(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))uflow-rescue500
(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))underflow50
(pow.f64 x #s(literal 2 binary64))underflow100
Confusion
Predicted +Predicted -
+1261
-0129
Precision
1.0
Recall
0.9921259842519685
Confusion?
Predicted +Predicted MaybePredicted -
+12601
-00129
Precision?
1.0
Recall?
0.9921259842519685
Freqs
test
numberfreq
0130
1126
Total Confusion?
Predicted +Predicted MaybePredicted -
+100
-000
Precision?
1.0
Recall?
1.0
Samples
26.0ms512×0valid
Compiler

Compiled 62 to 24 computations (61.3% saved)

Precisions
Click to see histograms. Total time spent on operations: 13.0ms
ival-pow2: 7.0ms (52.5% of total)
ival-sqrt: 3.0ms (22.5% of total)
ival-add: 2.0ms (15% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

eval0.0ms (0%)

Memory
0.3MiB live, 0.3MiB allocated
Compiler

Compiled 1 to 1 computations (0% saved)

prune1.0ms (0%)

Memory
1.0MiB live, 1.0MiB allocated
Alt Table
Click to see full alt table
StatusAccuracyProgram
54.1%
(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
Compiler

Compiled 9 to 5 computations (44.4% saved)

simplify4.0ms (0.1%)

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

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
cost-diff320
(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
cost-diff6144
(pow.f64 x #s(literal 2 binary64))
Rules
14×*-lowering-*.f32
14×*-lowering-*.f64
*-commutative
+-lowering-+.f64
count-2
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0516
1716
21216
31516
01513
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(sqrt (+ (pow x 2) (pow x 2)))
(+ (pow x 2) (pow x 2))
(pow x 2)
x
2
Outputs
(sqrt (+ (pow x 2) (pow x 2)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(+ (pow x 2) (pow x 2))
(*.f64 x (+.f64 x x))
(pow x 2)
(*.f64 x x)
x
2
#s(literal 2 binary64)

localize21.0ms (0.9%)

Memory
-12.0MiB live, 26.4MiB allocated
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(pow.f64 x #s(literal 2 binary64))
accuracy100.0%
(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
accuracy54.1%
(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
Samples
11.0ms256×0valid
Compiler

Compiled 22 to 7 computations (68.2% saved)

Precisions
Click to see histograms. Total time spent on operations: 6.0ms
ival-pow2: 3.0ms (49.9% of total)
ival-sqrt: 2.0ms (33.3% of total)
ival-add: 1.0ms (16.6% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series3.0ms (0.1%)

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

9 calls:

TimeVariablePointExpression
1.0ms
x
@0
(sqrt (+ (pow x 2) (pow x 2)))
1.0ms
x
@inf
(sqrt (+ (pow x 2) (pow x 2)))
0.0ms
x
@inf
(pow x 2)
0.0ms
x
@0
(pow x 2)
0.0ms
x
@0
(+ (pow x 2) (pow x 2))

rewrite38.0ms (1.6%)

Memory
-0.9MiB live, 42.6MiB allocated
Algorithm
batch-egg-rewrite
Rules
70×*-lowering-*.f32
70×*-lowering-*.f64
44×accelerator-lowering-fma.f32
44×accelerator-lowering-fma.f64
34×pow-lowering-pow.f64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify8.0ms (0.4%)

Memory
13.4MiB live, 13.4MiB 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
337148
441148
553148
665148
776148
896148
9101148
0101148
Stop Event
iter limit
saturated
Counts
36 → 36
Calls
Call 1
Inputs
(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)
(* 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))
(* 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
(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)
(* 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)))
(* 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)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))

eval12.0ms (0.5%)

Memory
-21.4MiB live, 16.7MiB allocated
Compiler

Compiled 726 to 105 computations (85.5% saved)

prune6.0ms (0.2%)

Memory
12.1MiB live, 12.1MiB allocated
Pruning

4 alts after pruning (4 fresh and 0 done)

PrunedKeptTotal
New83487
Fresh000
Picked101
Done000
Total84488
Accuracy
100.0%
Counts
88 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
45.9%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
54.1%
(sqrt.f64 (*.f64 x (+.f64 x x)))
55.4%
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
Compiler

Compiled 22 to 15 computations (31.8% saved)

simplify18.0ms (0.7%)

Memory
-18.3MiB live, 20.1MiB allocated
Algorithm
egg-herbie
Localize:

Found 9 expressions of interest:

NewMetricScoreProgram
cost-diff5312
(hypot.f64 x x)
cost-diff0
(sqrt.f64 #s(literal 2 binary64))
cost-diff0
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
cost-diff0
(+.f64 x x)
cost-diff0
(*.f64 x (+.f64 x x))
cost-diff0
(sqrt.f64 (*.f64 x (+.f64 x x)))
cost-diff0
(sqrt.f64 #s(literal 2 binary64))
cost-diff0
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
cost-diff0
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
Rules
208×accelerator-lowering-fma.f32
208×accelerator-lowering-fma.f64
168×*-lowering-*.f32
168×*-lowering-*.f64
94×associate-*r*
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01143
12343
23543
34543
45743
56943
68043
710343
811843
912743
1020543
1134743
1236143
1336143
036137
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(neg (* x (sqrt 2)))
(* x (sqrt 2))
x
(sqrt 2)
2
(sqrt (* x (+ x x)))
(* x (+ x x))
x
(+ x x)
(* x (sqrt 2))
x
(sqrt 2)
2
(sqrt (+ (* x x) (* x x)))
x
Outputs
(neg (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* 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 (+ x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(* x (+ x x))
(*.f64 x (+.f64 x x))
x
(+ x x)
(+.f64 x x)
(* 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 x) (* x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
x

localize36.0ms (1.5%)

Memory
12.5MiB live, 50.5MiB allocated
Localize:

Found 9 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(hypot.f64 x x)
accuracy100.0%
(sqrt.f64 #s(literal 2 binary64))
accuracy99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(*.f64 x (+.f64 x x))
accuracy54.1%
(sqrt.f64 (*.f64 x (+.f64 x x)))
accuracy100.0%
(sqrt.f64 #s(literal 2 binary64))
accuracy100.0%
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
accuracy99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Samples
23.0ms256×0valid
Compiler

Compiled 42 to 11 computations (73.8% saved)

Precisions
Click to see histograms. Total time spent on operations: 15.0ms
ival-hypot: 6.0ms (39.7% of total)
ival-sqrt: 4.0ms (26.5% of total)
ival-mult: 3.0ms (19.9% of total)
ival-add: 1.0ms (6.6% of total)
ival-neg: 1.0ms (6.6% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series2.0ms (0.1%)

Memory
3.4MiB live, 3.4MiB allocated
Counts
7 → 72
Calls
Call 1
Inputs
#<alt (neg (* x (sqrt 2)))>
#<alt (* x (sqrt 2))>
#<alt (sqrt 2)>
#<alt (sqrt (* x (+ x x)))>
#<alt (* x (+ x x))>
#<alt (+ x x)>
#<alt (sqrt (+ (* x x) (* x x)))>
Outputs
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* 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 (* 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 (* 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
0.0ms
x
@inf
(* x (+ x x))
0.0ms
x
@inf
(+ x x)
0.0ms
x
@0
(+ x x)
0.0ms
x
@-inf
(neg (* x (sqrt 2)))
0.0ms
x
@0
(neg (* x (sqrt 2)))

rewrite37.0ms (1.5%)

Memory
-1.0MiB live, 40.2MiB allocated
Algorithm
batch-egg-rewrite
Rules
114×*-lowering-*.f32
114×*-lowering-*.f64
70×accelerator-lowering-fma.f32
70×accelerator-lowering-fma.f64
62×/-lowering-/.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01133
14625
027423
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
7 → 101
Calls
Call 1
Inputs
(neg (* x (sqrt 2)))
(* x (sqrt 2))
(sqrt 2)
(sqrt (* x (+ x x)))
(* x (+ x x))
(+ x x)
(sqrt (+ (* x x) (* x x)))
Outputs
(+.f64 #s(literal 0 binary64) (*.f64 x (neg.f64 (sqrt.f64 #s(literal 2 binary64)))))
(-.f64 #s(literal 0 binary64) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(/.f64 (-.f64 #s(literal 0 binary64) (pow.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) #s(literal 3 binary64))) (+.f64 #s(literal 0 binary64) (fma.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (*.f64 #s(literal 0 binary64) (*.f64 x (sqrt.f64 #s(literal 2 binary64)))))))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))) (+.f64 #s(literal 0 binary64) (*.f64 x (sqrt.f64 #s(literal 2 binary64)))))
(*.f64 x (neg.f64 (sqrt.f64 #s(literal 2 binary64))))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) #s(literal -1 binary64))
(*.f64 #s(literal -1 binary64) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(*.f64 (neg.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (neg.f64 (sqrt.f64 #s(literal 2 binary64))) x)
(*.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 x x)) #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 x x))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64))))
(/.f64 (sqrt.f64 #s(literal 0 binary64)) (sqrt.f64 #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 x x #s(literal 0 binary64))))
(pow.f64 (+.f64 x x) #s(literal 1/2 binary64))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(*.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 x) (sqrt.f64 (+.f64 x x)))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
(*.f64 (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)) (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)))
(+.f64 x x)
(+.f64 (*.f64 x x) (*.f64 x x))
(-.f64 (/.f64 (*.f64 x x) #s(literal 0 binary64)) (/.f64 (*.f64 x x) #s(literal 0 binary64)))
(-.f64 (/.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal 0 binary64)) (/.f64 (*.f64 x (*.f64 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 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (neg.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 (neg.f64 (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64))))
(/.f64 #s(literal 1 binary64) (+.f64 x x))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 x x #s(literal 0 binary64)) (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x))))
(/.f64 (*.f64 x (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 #s(literal 0 binary64) x) #s(literal 0 binary64))
(*.f64 x #s(literal 2 binary64))
(*.f64 x (+.f64 x x))
(*.f64 #s(literal 2 binary64) x)
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(*.f64 (+.f64 x x) x)
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 x x #s(literal 0 binary64))))
(*.f64 (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64))))
(*.f64 #s(literal 0 binary64) (/.f64 #s(literal 1 binary64) #s(literal 0 binary64)))
(+.f64 x x)
(+.f64 (*.f64 x x) (*.f64 x x))
(-.f64 (/.f64 (*.f64 x x) #s(literal 0 binary64)) (/.f64 (*.f64 x x) #s(literal 0 binary64)))
(-.f64 (/.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal 0 binary64)) (/.f64 (*.f64 x (*.f64 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 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (neg.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 (neg.f64 (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64))))
(/.f64 #s(literal 1 binary64) (+.f64 x x))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 x x #s(literal 0 binary64)) (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x))))
(/.f64 (*.f64 x (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 #s(literal 0 binary64) x) #s(literal 0 binary64))
(*.f64 x #s(literal 2 binary64))
(*.f64 x (+.f64 x x))
(*.f64 #s(literal 2 binary64) x)
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(*.f64 (+.f64 x x) x)
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 x x #s(literal 0 binary64))))
(*.f64 (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64))))
(*.f64 #s(literal 0 binary64) (/.f64 #s(literal 1 binary64) #s(literal 0 binary64)))
(exp.f64 (*.f64 (log.f64 (+.f64 x x)) #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 x x))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64))))
(/.f64 (sqrt.f64 #s(literal 0 binary64)) (sqrt.f64 #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 x x #s(literal 0 binary64))))
(pow.f64 (+.f64 x x) #s(literal 1/2 binary64))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(*.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 x) (sqrt.f64 (+.f64 x x)))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
(*.f64 (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)) (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)))

simplify11.0ms (0.5%)

Memory
19.0MiB live, 19.0MiB 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
09308
117308
232308
336308
440308
552308
664308
775308
895308
9100308
0100308
Stop Event
iter limit
saturated
Counts
72 → 72
Calls
Call 1
Inputs
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* 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))
(* 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))
(* 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
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* 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)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* 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)))
(* 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)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))

eval19.0ms (0.8%)

Memory
-6.7MiB live, 31.8MiB allocated
Compiler

Compiled 1 491 to 195 computations (86.9% saved)

prune14.0ms (0.6%)

Memory
-12.4MiB live, 25.3MiB allocated
Pruning

8 alts after pruning (4 fresh and 4 done)

PrunedKeptTotal
New1874191
Fresh000
Picked044
Done000
Total1878195
Accuracy
100.0%
Counts
195 → 8
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
45.1%
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
45.9%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
26.4%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
3.1%
(sqrt.f64 (+.f64 x x))
54.1%
(sqrt.f64 (*.f64 x (+.f64 x x)))
55.4%
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
55.3%
(neg.f64 (*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))))
Compiler

Compiled 61 to 39 computations (36.1% saved)

simplify414.0ms (17.3%)

Memory
27.8MiB live, 424.1MiB allocated
Algorithm
egg-herbie
Localize:

Found 14 expressions of interest:

NewMetricScoreProgram
cost-diff0
(sqrt.f64 x)
cost-diff0
(+.f64 x x)
cost-diff0
(sqrt.f64 (+.f64 x x))
cost-diff0
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
cost-diff0
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
cost-diff0
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
cost-diff64
(fma.f64 x x #s(literal 0 binary64))
cost-diff1664
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
cost-diff0
(+.f64 x x)
cost-diff0
(sqrt.f64 (+.f64 x x))
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-diff0
(neg.f64 (*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))))
cost-diff12480
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
Rules
12 796×accelerator-lowering-fma.f32
12 796×accelerator-lowering-fma.f64
5 670×*-lowering-*.f32
5 670×*-lowering-*.f64
1 480×/-lowering-/.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01999
14588
211982
328474
442574
5114374
6254374
7350874
8562874
0804971
Stop Event
iter limit
node limit
Calls
Call 1
Inputs
(neg (* x (exp (* (log 2) 1/2))))
(* x (exp (* (log 2) 1/2)))
x
(exp (* (log 2) 1/2))
(* (log 2) 1/2)
(log 2)
2
1/2
(sqrt (+ x x))
(+ x x)
x
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0)))
(/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0))
(* (* (+ (* x x) 0) (+ x x)) x)
(* (+ (* x x) 0) (+ x x))
(+ (* x x) 0)
x
0
(+ x x)
(* (sqrt (+ x x)) (sqrt x))
(sqrt (+ x x))
(+ x x)
x
(sqrt x)
Outputs
(neg (* x (exp (* (log 2) 1/2))))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* 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)
(sqrt (+ x x))
(sqrt.f64 (+.f64 x x))
(+ x x)
(+.f64 x x)
x
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0))
(*.f64 x (+.f64 x x))
(* (* (+ (* x x) 0) (+ x x)) x)
(*.f64 (+.f64 x x) (*.f64 x (*.f64 x x)))
(* (+ (* x x) 0) (+ x x))
(*.f64 (+.f64 x x) (*.f64 x x))
(+ (* x x) 0)
(*.f64 x x)
x
0
#s(literal 0 binary64)
(+ x x)
(+.f64 x x)
(* (sqrt (+ x x)) (sqrt x))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
(sqrt (+ x x))
(sqrt.f64 (+.f64 x x))
(+ x x)
(+.f64 x x)
x
(sqrt x)
(sqrt.f64 x)

localize66.0ms (2.8%)

Memory
-7.6MiB live, 108.7MiB allocated
Localize:

Found 14 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(sqrt.f64 (+.f64 x x))
accuracy100.0%
(sqrt.f64 x)
accuracy99.7%
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
accuracy100.0%
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
accuracy100.0%
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
accuracy80.3%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
accuracy68.6%
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(sqrt.f64 (+.f64 x x))
accuracy100.0%
(neg.f64 (*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))))
accuracy100.0%
(log.f64 #s(literal 2 binary64))
accuracy99.7%
(*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))))
accuracy99.3%
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
Samples
22.0ms140×0invalid
17.0ms116×0valid
Compiler

Compiled 114 to 21 computations (81.6% saved)

Precisions
Click to see histograms. Total time spent on operations: 27.0ms
ival-mult: 8.0ms (30% of total)
ival-sqrt: 7.0ms (26.3% of total)
ival-exp: 3.0ms (11.3% of total)
ival-log: 3.0ms (11.3% of total)
ival-div: 2.0ms (7.5% of total)
ival-add: 2.0ms (7.5% of total)
ival-neg: 1.0ms (3.8% of total)
ival-assert: 0.0ms (0% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)

series6.0ms (0.2%)

Memory
8.6MiB live, 8.6MiB allocated
Counts
14 → 132
Calls
Call 1
Inputs
#<alt (exp (* (log 2) 1/2))>
#<alt (neg (* x (exp (* (log 2) 1/2))))>
#<alt (* x (exp (* (log 2) 1/2)))>
#<alt (* (log 2) 1/2)>
#<alt (sqrt (+ x x))>
#<alt (+ x x)>
#<alt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0))>
#<alt (+ (* x x) 0)>
#<alt (sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0)))>
#<alt (* (* (+ (* x x) 0) (+ x x)) x)>
#<alt (* (sqrt (+ x x)) (sqrt x))>
#<alt (sqrt x)>
#<alt (log 2)>
#<alt (* (+ (* x x) 0) (+ x x))>
Outputs
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* 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 (* (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 (* 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)>
#<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 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<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 (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
Calls

33 calls:

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

rewrite39.0ms (1.6%)

Memory
-4.3MiB live, 39.3MiB allocated
Algorithm
batch-egg-rewrite
Rules
122×*-lowering-*.f32
122×*-lowering-*.f64
118×/-lowering-/.f32
118×/-lowering-/.f64
66×accelerator-lowering-fma.f32
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01953
18729
072529
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
14 → 54
Calls
Call 1
Inputs
(exp (* (log 2) 1/2))
(neg (* x (exp (* (log 2) 1/2))))
(* x (exp (* (log 2) 1/2)))
(* (log 2) 1/2)
(sqrt (+ x x))
(+ x x)
(/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0))
(+ (* x x) 0)
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0)))
(* (* (+ (* x x) 0) (+ x x)) x)
(* (sqrt (+ x x)) (sqrt x))
(sqrt x)
(log 2)
(* (+ (* x x) 0) (+ x x))
Outputs
(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))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 #s(literal 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)))
(+.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x)))
(-.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(neg.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(/.f64 (-.f64 #s(literal 0 binary64) (pow.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) x) #s(literal 3 binary64))) (+.f64 #s(literal 0 binary64) (fma.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) x) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x) (*.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x)))))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) x) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))) (+.f64 #s(literal 0 binary64) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (neg.f64 x))
(*.f64 x (neg.f64 (sqrt.f64 #s(literal 2 binary64))))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) x) #s(literal -1 binary64))
(*.f64 #s(literal -1 binary64) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(*.f64 (neg.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (neg.f64 (sqrt.f64 #s(literal 2 binary64))) x)
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(*.f64 x (sqrt.f64 #s(literal 2 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)))
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)
(+.f64 (*.f64 x x) #s(literal 0 binary64))
(+.f64 #s(literal 0 binary64) (*.f64 x x))
(exp.f64 (*.f64 (log.f64 x) #s(literal 2 binary64)))
(-.f64 (*.f64 x x) #s(literal 0 binary64))
(-.f64 (fma.f64 x x (*.f64 x x)) (*.f64 x x))
(fma.f64 x x #s(literal 0 binary64))
(fma.f64 (fabs.f64 x) (fabs.f64 x) #s(literal 0 binary64))
(fma.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64))
(fma.f64 (*.f64 x (*.f64 x (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 x x)) #s(literal 0 binary64))
(/.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (*.f64 x (*.f64 x (*.f64 x x))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x))))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 x x))
(/.f64 (neg.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x))))) (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))) (*.f64 x (neg.f64 x)))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) (*.f64 x (neg.f64 x)))
(/.f64 (-.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64)) (*.f64 x (*.f64 x (*.f64 x x))))
(pow.f64 x #s(literal 2 binary64))
(*.f64 x x)
(*.f64 (fabs.f64 x) (fabs.f64 x))
(*.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))))
(*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 x x)))
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 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)))
(log.f64 #s(literal 2 binary64))
#s(literal 0 binary64)

simplify237.0ms (9.9%)

Memory
4.9MiB live, 81.8MiB allocated
Algorithm
egg-herbie
Rules
2 058×associate-*r*
1 620×*-lowering-*.f32
1 620×*-lowering-*.f64
1 616×accelerator-lowering-fma.f32
1 616×accelerator-lowering-fma.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
028576
160576
2151576
3275576
4507576
5827576
61359576
71483576
81546576
91604576
101853576
112109576
122165576
132185576
142189576
152189576
162189576
172405576
182695576
193564576
203718576
213822576
223842576
233842576
243842576
253862576
263870576
273870576
284284576
294896576
304912576
04912576
Stop Event
iter limit
saturated
Counts
132 → 132
Calls
Call 1
Inputs
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* 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))
(* (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)
(* 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)
(* 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 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 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)))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
Outputs
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.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)))
(* (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))))
(neg.f64 (*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(neg.f64 (*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(neg.f64 (*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(neg.f64 (*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (sqrt.f64 #s(literal -1 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))
(* 2 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)))
(* 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)
(* 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)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #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 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.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)
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))

eval44.0ms (1.8%)

Memory
2.8MiB live, 41.6MiB allocated
Compiler

Compiled 2 861 to 275 computations (90.4% saved)

prune30.0ms (1.3%)

Memory
-5.1MiB live, 35.3MiB allocated
Pruning

9 alts after pruning (2 fresh and 7 done)

PrunedKeptTotal
New2572259
Fresh000
Picked134
Done044
Total2589267
Accuracy
100.0%
Counts
267 → 9
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
45.1%
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
45.9%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
26.4%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
3.1%
(sqrt.f64 (+.f64 x x))
54.1%
(sqrt.f64 (*.f64 x (+.f64 x x)))
55.4%
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
55.3%
(neg.f64 (*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))))
3.5%
#s(literal 0 binary64)
Compiler

Compiled 62 to 42 computations (32.3% saved)

simplify331.0ms (13.8%)

Memory
-2.2MiB live, 362.3MiB allocated
Algorithm
egg-herbie
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
cost-diff0
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
cost-diff64
(fma.f64 x x #s(literal 0 binary64))
cost-diff1664
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x))
Rules
6 778×*-lowering-*.f32
6 778×*-lowering-*.f64
5 432×accelerator-lowering-fma.f32
5 432×accelerator-lowering-fma.f64
2 302×cube-prod
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0955
12943
29533
326233
462933
5222333
6336233
7395433
8492033
9633933
10675933
11692533
12705533
13719233
14733833
0835130
Stop Event
iter limit
node limit
Calls
Call 1
Inputs
0
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x)))
(/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x))
(* (* (+ (* x x) 0) (+ x x)) x)
(* (+ (* x x) 0) (+ x x))
(+ (* x x) 0)
x
0
(+ x x)
(* x x)
Outputs
0
#s(literal 0 binary64)
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x))
(*.f64 x (+.f64 x x))
(* (* (+ (* x x) 0) (+ x x)) x)
(*.f64 x (*.f64 x (*.f64 x (+.f64 x x))))
(* (+ (* x x) 0) (+ x x))
(*.f64 x (*.f64 x (+.f64 x x)))
(+ (* x x) 0)
(*.f64 x x)
x
0
#s(literal 0 binary64)
(+ x x)
(+.f64 x x)
(* x x)
(*.f64 x x)

localize66.0ms (2.7%)

Memory
-19.6MiB live, 56.6MiB allocated
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
accuracy99.9%
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
accuracy99.9%
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
accuracy54.1%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
accuracy33.6%
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x))
Samples
53.0ms256×0valid
Compiler

Compiled 62 to 11 computations (82.3% saved)

Precisions
Click to see histograms. Total time spent on operations: 46.0ms
ival-sqrt: 36.0ms (78.3% of total)
ival-mult: 5.0ms (10.9% of total)
ival-add: 4.0ms (8.7% of total)
ival-div: 2.0ms (4.4% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series1.0ms (0%)

Memory
1.9MiB live, 1.9MiB allocated
Counts
5 → 60
Calls
Call 1
Inputs
#<alt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x))>
#<alt (+ (* x x) 0)>
#<alt (sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x)))>
#<alt (* (* (+ (* x x) 0) (+ x x)) x)>
#<alt (* (+ (* x x) 0) (+ x x))>
Outputs
#<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)>
#<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 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
Calls

15 calls:

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

rewrite37.0ms (1.5%)

Memory
3.2MiB live, 46.2MiB allocated
Algorithm
batch-egg-rewrite
Rules
110×/-lowering-/.f32
110×/-lowering-/.f64
88×*-lowering-*.f32
88×*-lowering-*.f64
64×accelerator-lowering-fma.f32
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0955
1637
07107
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
5 → 26
Calls
Call 1
Inputs
(/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x))
(+ (* x x) 0)
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x)))
(* (* (+ (* x x) 0) (+ x x)) x)
(* (+ (* x x) 0) (+ x x))
Outputs
#s(literal 0 binary64)
(+.f64 (*.f64 x x) #s(literal 0 binary64))
(+.f64 #s(literal 0 binary64) (*.f64 x x))
(exp.f64 (*.f64 (log.f64 x) #s(literal 2 binary64)))
(-.f64 (*.f64 x x) #s(literal 0 binary64))
(-.f64 (fma.f64 x x (*.f64 x x)) (*.f64 x x))
(fma.f64 x x #s(literal 0 binary64))
(fma.f64 (fabs.f64 x) (fabs.f64 x) #s(literal 0 binary64))
(fma.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64))
(fma.f64 (*.f64 x (*.f64 x (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 x x)) #s(literal 0 binary64))
(/.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (*.f64 x (*.f64 x (*.f64 x x))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x))))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 x x))
(/.f64 (neg.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x))))) (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))) (neg.f64 (*.f64 x x)))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) (neg.f64 (*.f64 x x)))
(/.f64 (-.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64)) (*.f64 x (*.f64 x (*.f64 x x))))
(pow.f64 x #s(literal 2 binary64))
(*.f64 x x)
(*.f64 (fabs.f64 x) (fabs.f64 x))
(*.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))))
(*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 x x)))
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)

simplify11.0ms (0.5%)

Memory
17.3MiB live, 17.3MiB allocated
Algorithm
egg-herbie
Rules
58×*-lowering-*.f32
58×*-lowering-*.f64
54×accelerator-lowering-fma.f32
54×accelerator-lowering-fma.f64
44×+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
014268
125268
248268
359268
463268
575268
687268
798268
8126268
9138268
0138268
Stop Event
iter limit
saturated
Counts
60 → 60
Calls
Call 1
Inputs
(* 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)
(* 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 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
Outputs
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) 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)
(pow x 2)
(*.f64 x x)
(* 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)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))

eval10.0ms (0.4%)

Memory
-12.3MiB live, 25.9MiB allocated
Compiler

Compiled 1 094 to 152 computations (86.1% saved)

prune9.0ms (0.4%)

Memory
-8.4MiB live, 30.6MiB allocated
Pruning

9 alts after pruning (1 fresh and 8 done)

PrunedKeptTotal
New85186
Fresh000
Picked112
Done077
Total86995
Accuracy
100.0%
Counts
95 → 9
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
45.1%
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
45.9%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
26.4%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 x x) (+.f64 x x)) x) (*.f64 x x)))
3.1%
(sqrt.f64 (+.f64 x x))
54.1%
(sqrt.f64 (*.f64 x (+.f64 x x)))
55.4%
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
55.3%
(neg.f64 (*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))))
3.5%
#s(literal 0 binary64)
Compiler

Compiled 153 to 74 computations (51.6% saved)

regimes18.0ms (0.8%)

Memory
4.5MiB live, 43.2MiB allocated
Counts
12 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 x x) (+.f64 x x)) x) (*.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
(hypot.f64 x x)
(neg.f64 (*.f64 x (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))))
(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
Outputs
(hypot.f64 x x)
Calls

4 calls:

5.0ms
(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
4.0ms
x
4.0ms
(pow.f64 x #s(literal 2 binary64))
4.0ms
(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
Results
AccuracySegmentsBranch
100.0%1x
100.0%1(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
100.0%1(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
100.0%1(pow.f64 x #s(literal 2 binary64))
Compiler

Compiled 23 to 13 computations (43.5% saved)

regimes18.0ms (0.8%)

Memory
-3.7MiB live, 36.9MiB allocated
Counts
9 → 2
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 x x) (+.f64 x x)) x) (*.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
Outputs
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
Calls

4 calls:

7.0ms
(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
4.0ms
x
3.0ms
(pow.f64 x #s(literal 2 binary64))
3.0ms
(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
Results
AccuracySegmentsBranch
99.4%2x
79.9%3(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
79.9%3(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
79.9%3(pow.f64 x #s(literal 2 binary64))
Compiler

Compiled 23 to 13 computations (43.5% saved)

regimes3.0ms (0.1%)

Memory
6.9MiB live, 6.9MiB allocated
Counts
5 → 2
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(sqrt.f64 (*.f64 x (+.f64 x x)))
Outputs
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Calls

1 calls:

2.0ms
x
Results
AccuracySegmentsBranch
99.3%2x
Compiler

Compiled 2 to 1 computations (50% saved)

regimes8.0ms (0.3%)

Memory
17.8MiB live, 17.8MiB allocated
Counts
3 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Outputs
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Calls

4 calls:

2.0ms
x
2.0ms
(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
2.0ms
(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
2.0ms
(pow.f64 x #s(literal 2 binary64))
Results
AccuracySegmentsBranch
45.9%1(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
45.9%1(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
45.9%1(pow.f64 x #s(literal 2 binary64))
45.9%1x
Compiler

Compiled 23 to 13 computations (43.5% saved)

regimes9.0ms (0.4%)

Memory
-17.6MiB live, 17.6MiB allocated
Counts
2 → 2
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
Outputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
Calls

4 calls:

4.0ms
(pow.f64 x #s(literal 2 binary64))
1.0ms
(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
1.0ms
x
1.0ms
(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
Results
AccuracySegmentsBranch
5.1%2x
3.5%1(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
3.5%1(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
3.5%1(pow.f64 x #s(literal 2 binary64))
Compiler

Compiled 23 to 13 computations (43.5% saved)

regimes5.0ms (0.2%)

Memory
16.0MiB live, 16.0MiB allocated
Accuracy

Total 0.0b remaining (0%)

Threshold costs 0b (0%)

Counts
1 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
Outputs
#s(literal 0 binary64)
Calls

4 calls:

1.0ms
x
1.0ms
(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
1.0ms
(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
1.0ms
(pow.f64 x #s(literal 2 binary64))
Results
AccuracySegmentsBranch
3.5%1(sqrt.f64 (+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64))))
3.5%1(+.f64 (pow.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 2 binary64)))
3.5%1(pow.f64 x #s(literal 2 binary64))
3.5%1x
Compiler

Compiled 23 to 13 computations (43.5% saved)

bsearch14.0ms (0.6%)

Memory
-9.2MiB live, 28.9MiB allocated
Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
13.0ms
-2.719997322683207e-293
7.918877166043363e-307
Samples
8.0ms160×0valid
Compiler

Compiled 172 to 128 computations (25.6% saved)

Precisions
Click to see histograms. Total time spent on operations: 6.0ms
ival-pow2: 4.0ms (72.6% of total)
ival-add: 1.0ms (18.2% of total)
ival-sqrt: 1.0ms (18.2% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

bsearch15.0ms (0.6%)

Memory
-7.9MiB live, 30.0MiB allocated
Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
14.0ms
-2.719997322683207e-293
7.918877166043363e-307
Samples
9.0ms160×0valid
Compiler

Compiled 142 to 118 computations (16.9% saved)

Precisions
Click to see histograms. Total time spent on operations: 4.0ms
ival-pow2: 2.0ms (55% of total)
ival-add: 1.0ms (27.5% of total)
ival-sqrt: 1.0ms (27.5% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

bsearch21.0ms (0.9%)

Memory
-16.9MiB live, 32.2MiB allocated
Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
11.0ms
6.711906799865404e-208
3.3710941053474126e-196
Samples
6.0ms160×0valid
Compiler

Compiled 102 to 78 computations (23.5% saved)

Precisions
Click to see histograms. Total time spent on operations: 3.0ms
ival-pow2: 2.0ms (57.7% of total)
ival-add: 1.0ms (28.8% of total)
ival-sqrt: 1.0ms (28.8% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

simplify8.0ms (0.3%)

Memory
23.2MiB live, 23.2MiB allocated
Algorithm
egg-herbie
Rules
10×*-commutative_binary64
+-commutative_binary64
sub-neg_binary64
neg-sub0_binary64
neg-mul-1_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01846
12746
23646
34146
44346
Stop Event
saturated
Calls
Call 1
Inputs
(hypot.f64 x x)
(if (<=.f64 x #s(literal -101201126653655/202402253307310618352495346718917307049556649764142118356901358027430339567995346891960383701437124495187077864316811911389808737385793476867013399940738509921517424276566361364466907742093216341239767678472745068562007483424692698618103355649159556340810056512358769552333414615230502532186327508646006263307707741093494784 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64)))) (*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x)))
(if (<=.f64 x #s(literal -101201126653655/202402253307310618352495346718917307049556649764142118356901358027430339567995346891960383701437124495187077864316811911389808737385793476867013399940738509921517424276566361364466907742093216341239767678472745068562007483424692698618103355649159556340810056512358769552333414615230502532186327508646006263307707741093494784 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64)))) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(if (<=.f64 x #s(literal 3569553643807187/90368446678662959902371482950548091627243325179250480789868861787606202571558351996987965471847359903068731695945087890499945499708108510324049698831582275405785474927446915858324226319766512887160235503322704971703517184 binary64)) #s(literal 0 binary64) (sqrt.f64 (+.f64 x x)))
#s(literal 0 binary64)
Outputs
(hypot.f64 x x)
(if (<=.f64 x #s(literal -101201126653655/202402253307310618352495346718917307049556649764142118356901358027430339567995346891960383701437124495187077864316811911389808737385793476867013399940738509921517424276566361364466907742093216341239767678472745068562007483424692698618103355649159556340810056512358769552333414615230502532186327508646006263307707741093494784 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64)))) (*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x)))
(if (<=.f64 x #s(literal -101201126653655/202402253307310618352495346718917307049556649764142118356901358027430339567995346891960383701437124495187077864316811911389808737385793476867013399940738509921517424276566361364466907742093216341239767678472745068562007483424692698618103355649159556340810056512358769552333414615230502532186327508646006263307707741093494784 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64)))) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(if (<=.f64 x #s(literal 3569553643807187/90368446678662959902371482950548091627243325179250480789868861787606202571558351996987965471847359903068731695945087890499945499708108510324049698831582275405785474927446915858324226319766512887160235503322704971703517184 binary64)) #s(literal 0 binary64) (sqrt.f64 (+.f64 x x)))
#s(literal 0 binary64)

soundness112.0ms (4.7%)

Memory
15.1MiB live, 205.4MiB allocated
Rules
122×*-lowering-*.f32
122×*-lowering-*.f64
118×/-lowering-/.f32
118×/-lowering-/.f64
114×*-lowering-*.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
08148
115148
232148
337148
441148
553148
665148
776148
896148
9101148
0101148
0514
12510
01679
01133
14625
027423
01953
18729
072529
Stop Event
fuel
iter limit
iter limit
iter limit
unsound
iter limit
iter limit
iter limit
unsound
iter limit
iter limit
iter limit
unsound
iter limit
saturated
Compiler

Compiled 121 to 68 computations (43.8% saved)

preprocess39.0ms (1.6%)

Memory
-11.2MiB live, 107.2MiB allocated
Compiler

Compiled 112 to 46 computations (58.9% saved)

end0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated

Profiling

Loading profile data...