sqrt A (should all be same)

Time bar (total: 2.6s)

analyze0.0ms (0%)

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

sample458.0ms (17.6%)

Memory
33.7MiB live, 901.7MiB allocated
Samples
305.0ms8 256×0valid
Precisions
Click to see histograms. Total time spent on operations: 155.0ms
ival-hypot: 146.0ms (94.2% of total)
ival-true: 6.0ms (3.9% of total)
ival-assert: 3.0ms (1.9% of total)
Bogosity

preprocess20.0ms (0.8%)

Memory
-15.8MiB live, 22.2MiB allocated
Algorithm
egg-herbie
Rules
42×associate-*r*
32×distribute-lft-neg-in
32×sub-neg
24×neg-sub0
22×distribute-lft-in
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0613
12113
26613
316613
424713
525613
625813
048
076
1116
2146
3176
0173
Stop Event
iter limit
saturated
iter limit
saturated
Calls
Call 1
Inputs
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Outputs
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
Symmetry

(abs x)

explain75.0ms (2.9%)

Memory
-8.1MiB live, 69.5MiB allocated
FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
1340-3(8.354380086601993e-157)(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-rescue670
(+.f64 (*.f64 x x) (*.f64 x x))underflow67
(*.f64 x x)underflow134
sqrt.f64(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))oflow-rescue640
(+.f64 (*.f64 x x) (*.f64 x x))overflow64
(*.f64 x x)overflow128
Confusion
Predicted +Predicted -
+1314
-0121
Precision
1.0
Recall
0.9703703703703703
Confusion?
Predicted +Predicted MaybePredicted -
+13104
-00121
Precision?
1.0
Recall?
0.9703703703703703
Freqs
test
numberfreq
0125
1131
Total Confusion?
Predicted +Predicted MaybePredicted -
+100
-000
Precision?
1.0
Recall?
1.0
Samples
30.0ms512×0valid
Compiler

Compiled 60 to 20 computations (66.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 15.0ms
ival-hypot: 9.0ms (60.9% of total)
ival-mult: 3.0ms (20.3% of total)
ival-add: 2.0ms (13.5% of total)
ival-true: 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.1MiB live, 1.1MiB allocated
Alt Table
Click to see full alt table
StatusAccuracyProgram
51.7%
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Compiler

Compiled 9 to 4 computations (55.6% saved)

simplify4.0ms (0.2%)

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

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 x x)
cost-diff0
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
cost-diff320
(+.f64 (*.f64 x x) (*.f64 x x))
Rules
14×lower-*.f32
12×lower-*.f64
*-commutative
count-2
associate-*r*
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0419
0715
11115
21415
31715
01712
Stop Event
iter limit
saturated
iter limit
Calls
Call 1
Inputs
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(+.f64 (*.f64 x x) (*.f64 x x))
(*.f64 x x)
x
Outputs
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(+.f64 (*.f64 x x) (*.f64 x x))
(*.f64 x (+.f64 x x))
(*.f64 x x)
x

localize21.0ms (0.8%)

Memory
-15.0MiB live, 25.9MiB allocated
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 x x)
accuracy100.0%
(+.f64 (*.f64 x x) (*.f64 x x))
accuracy51.8%
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Samples
15.0ms256×0valid
Compiler

Compiled 21 to 6 computations (71.4% saved)

Precisions
Click to see histograms. Total time spent on operations: 10.0ms
ival-hypot: 8.0ms (77.6% of total)
ival-mult: 2.0ms (19.4% of total)
ival-add: 1.0ms (9.7% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series3.0ms (0.1%)

Memory
2.6MiB live, 2.6MiB allocated
Counts
3 → 36
Calls
Call 1
Inputs
#<alt (+.f64 (*.f64 x x) (*.f64 x x))>
#<alt (sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))>
#<alt (*.f64 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 (* 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 (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
@0
(sqrt (+ (* x x) (* x x)))
1.0ms
x
@inf
(sqrt (+ (* x x) (* x x)))
1.0ms
x
@0
(+ (* x x) (* x x))
0.0ms
x
@inf
(+ (* x x) (* x x))
0.0ms
x
@-inf
(+ (* x x) (* x x))

rewrite35.0ms (1.3%)

Memory
5.8MiB live, 43.9MiB allocated
Algorithm
batch-egg-rewrite
Rules
66×lower-*.f32
64×lower-*.f64
42×lower-fma.f64
42×lower-fma.f32
34×lower-/.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0418
0714
12310
01609
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
3 → 33
Calls
Call 1
Inputs
(+.f64 (*.f64 x x) (*.f64 x x))
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(*.f64 x x)
Outputs
(+.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 (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 (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 #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 x (+.f64 x x))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(*.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 x x) x)
(exp.f64 (*.f64 (log.f64 (*.f64 x (+.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 (+.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 x #s(literal 1/2 binary64)) (pow.f64 (+.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 x) (sqrt.f64 (+.f64 x x)))
(*.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)))
(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)))

simplify7.0ms (0.3%)

Memory
11.2MiB live, 11.2MiB allocated
Algorithm
egg-herbie
Rules
38×lower-*.f64
38×lower-fma.f64
38×lower-fma.f32
38×lower-*.f32
36×lower-+.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
(* 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)))
(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
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.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))))
(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.3%)

Memory
15.8MiB live, 15.8MiB allocated
Compiler

Compiled 702 to 94 computations (86.6% saved)

prune8.0ms (0.3%)

Memory
-22.6MiB live, 14.4MiB allocated
Pruning

4 alts after pruning (4 fresh and 0 done)

PrunedKeptTotal
New81485
Fresh000
Picked101
Done000
Total82486
Accuracy
100.0%
Counts
86 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
51.8%
(sqrt.f64 (*.f64 (+.f64 x x) x))
Compiler

Compiled 24 to 15 computations (37.5% saved)

simplify5.0ms (0.2%)

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

Found 10 expressions of interest:

NewMetricScoreProgram
cost-diff5312
(hypot.f64 x x)
cost-diff0
(+.f64 x x)
cost-diff0
(sqrt.f64 (+.f64 x x))
cost-diff0
(sqrt.f64 x)
cost-diff0
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.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 (+.f64 x x) x)
cost-diff0
(sqrt.f64 (*.f64 (+.f64 x x) x))
Rules
22×lower-*.f32
16×lower-*.f64
10×*-commutative
lift-sqrt.f64
lower-sqrt.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01144
02241
12741
23041
03041
Stop Event
iter limit
saturated
iter limit
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 (+.f64 x x) x))
(*.f64 (+.f64 x x) x)
(+.f64 x x)
x
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
x
(sqrt.f64 #s(literal 2 binary64))
#s(literal 2 binary64)
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt.f64 x)
x
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
(hypot.f64 x x)
x
Outputs
(sqrt.f64 (*.f64 (+.f64 x x) x))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(*.f64 (+.f64 x x) x)
(*.f64 x (+.f64 x x))
(+.f64 x x)
x
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
x
(sqrt.f64 #s(literal 2 binary64))
#s(literal 2 binary64)
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt.f64 x)
x
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
(hypot.f64 x x)
(sqrt.f64 (*.f64 x (+.f64 x x)))
x

localize44.0ms (1.7%)

Memory
-21.3MiB live, 69.8MiB allocated
Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(hypot.f64 x x)
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(sqrt.f64 (+.f64 x x))
accuracy100.0%
(sqrt.f64 x)
accuracy99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
accuracy100.0%
(sqrt.f64 #s(literal 2 binary64))
accuracy99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(*.f64 (+.f64 x x) x)
accuracy51.8%
(sqrt.f64 (*.f64 (+.f64 x x) x))
Samples
30.0ms256×0valid
Compiler

Compiled 46 to 13 computations (71.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 21.0ms
ival-hypot: 9.0ms (42.6% of total)
ival-sqrt: 6.0ms (28.4% of total)
ival-mult: 4.0ms (18.9% of total)
ival-add: 1.0ms (4.7% 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.2%)

Memory
8.2MiB live, 8.2MiB allocated
Counts
9 → 96
Calls
Call 1
Inputs
#<alt (sqrt.f64 (*.f64 (+.f64 x x) x))>
#<alt (*.f64 (+.f64 x x) x)>
#<alt (+.f64 x x)>
#<alt (*.f64 x (sqrt.f64 #s(literal 2 binary64)))>
#<alt (sqrt.f64 #s(literal 2 binary64))>
#<alt (*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))>
#<alt (sqrt.f64 x)>
#<alt (sqrt.f64 (+.f64 x x))>
#<alt (hypot.f64 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 (* 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 (* 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 (* 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

24 calls:

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

rewrite33.0ms (1.3%)

Memory
0.1MiB live, 38.1MiB allocated
Algorithm
batch-egg-rewrite
Rules
98×lower-*.f32
92×lower-*.f64
68×lower-fma.f64
68×lower-fma.f32
58×lower-/.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01136
02230
15026
025526
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
9 → 126
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 (+.f64 x x) x))
(*.f64 (+.f64 x x) x)
(+.f64 x x)
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 #s(literal 2 binary64))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt.f64 x)
(sqrt.f64 (+.f64 x x))
(hypot.f64 x x)
Outputs
(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 x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.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 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 (*.f64 x x) (*.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 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.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 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 x x #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 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 (*.f64 x 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 (*.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 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 (+.f64 x x))
(*.f64 x #s(literal 2 binary64))
(*.f64 (+.f64 x x) x)
(*.f64 #s(literal 2 binary64) 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 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 (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 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 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.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 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 x x #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 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 (*.f64 x 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 (*.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 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 (+.f64 x x))
(*.f64 x #s(literal 2 binary64))
(*.f64 (+.f64 x x) x)
(*.f64 #s(literal 2 binary64) 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 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 (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 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 x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.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 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 (*.f64 x x) (*.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)))
(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 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 x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.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 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 (*.f64 x x) (*.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)))
(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 x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.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 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 (*.f64 x x) (*.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)))

simplify225.0ms (8.6%)

Memory
8.9MiB live, 86.1MiB allocated
Algorithm
egg-herbie
Rules
1 478×associate-*r*
1 232×lower-*.f64
1 232×lower-fma.f64
1 232×lower-fma.f32
1 232×lower-*.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
022412
150412
2136412
3265412
4490412
5809412
61411412
71537412
81592412
91630412
101808412
112022412
122068412
132096412
142100412
152100412
162246412
172430412
183585412
193703412
203727412
213735412
223739412
233743412
243855412
253903412
263903412
274085412
04085412
Stop Event
iter limit
saturated
Counts
96 → 96
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))
(* 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))
(* 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))))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
Outputs
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* x (sqrt 2)))
(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 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x 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)))
(* 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 (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)
(* (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 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.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)))
(* -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))))

eval31.0ms (1.2%)

Memory
-1.5MiB live, 39.5MiB allocated
Compiler

Compiled 2 297 to 231 computations (89.9% saved)

prune15.0ms (0.6%)

Memory
-5.6MiB live, 32.3MiB allocated
Pruning

6 alts after pruning (2 fresh and 4 done)

PrunedKeptTotal
New2582260
Fresh000
Picked044
Done000
Total2586264
Accuracy
100.0%
Counts
264 → 6
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
6.9%
(sqrt.f64 (+.f64 x x))
51.8%
(sqrt.f64 (*.f64 (+.f64 x x) x))
20.7%
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x))
Compiler

Compiled 56 to 29 computations (48.2% saved)

simplify424.0ms (16.3%)

Memory
15.4MiB live, 601.6MiB allocated
Algorithm
egg-herbie
Localize:

Found 6 expressions of interest:

NewMetricScoreProgram
cost-diff0
(+.f64 x x)
cost-diff0
(sqrt.f64 (+.f64 x x))
cost-diff0
(*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x)
cost-diff0
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x))
cost-diff64
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
cost-diff3264
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
Rules
18 352×lower-fma.f32
18 350×lower-fma.f64
5 114×lower-*.f32
5 106×lower-*.f64
1 838×lower-/.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
012121
022148
144112
215446
378844
4375944
5429644
6523644
7657244
8708844
9737544
0818841
Stop Event
iter limit
node limit
iter limit
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x))
(*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x)
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (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 x))
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
(*.f64 x x)
x
#s(literal 0 binary64)
(+.f64 x x)
(/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))
#s(literal 1 binary64)
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
x
Outputs
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x)
(*.f64 x (+.f64 x x))
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(+.f64 x x)
(*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))
(*.f64 (*.f64 x x) (*.f64 x (*.f64 x (+.f64 x x))))
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
(*.f64 x (*.f64 x (*.f64 x x)))
(*.f64 x x)
x
#s(literal 0 binary64)
(+.f64 x x)
(/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))
(/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x))))
#s(literal 1 binary64)
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
x

localize48.0ms (1.9%)

Memory
-3.6MiB live, 105.6MiB allocated
Localize:

Found 6 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(sqrt.f64 (+.f64 x x))
accuracy99.8%
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
accuracy99.8%
(/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))
accuracy51.8%
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x))
accuracy23.7%
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
Samples
23.0ms256×0valid
Compiler

Compiled 123 to 15 computations (87.8% saved)

Precisions
Click to see histograms. Total time spent on operations: 14.0ms
ival-mult: 7.0ms (48.7% of total)
ival-sqrt: 3.0ms (20.9% of total)
ival-div: 2.0ms (13.9% of total)
ival-add: 2.0ms (13.9% 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
6.4MiB live, 6.4MiB allocated
Counts
7 → 84
Calls
Call 1
Inputs
#<alt (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))>
#<alt (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))>
#<alt (sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x))>
#<alt (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x)>
#<alt (sqrt.f64 (+.f64 x x))>
#<alt (+.f64 x x)>
#<alt (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))>
Outputs
#<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 (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (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)))>
#<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 (* (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 (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
Calls

21 calls:

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

rewrite63.0ms (2.4%)

Memory
20.1MiB live, 102.1MiB allocated
Algorithm
batch-egg-rewrite
Rules
220×lower-*.f32
218×lower-*.f64
160×lower-fma.f32
158×lower-fma.f64
144×lower-/.f32
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01299
02287
18513
078413
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
7 → 63
Calls
Call 1
Inputs
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x))
(*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x)
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
(/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))
Outputs
#s(literal 0 binary64)
(+.f64 #s(literal 0 binary64) (*.f64 (*.f64 x x) (*.f64 x x)))
(+.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64))
(exp.f64 (*.f64 (log.f64 (*.f64 x x)) #s(literal 2 binary64)))
(-.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64))
(fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64))
(fma.f64 x (/.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64)) #s(literal 0 binary64))
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
(fma.f64 (*.f64 x x) (/.f64 (*.f64 x x) #s(literal 1 binary64)) #s(literal 0 binary64))
(fma.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 1 binary64) #s(literal 0 binary64))
(fma.f64 (*.f64 x (*.f64 x x)) x #s(literal 0 binary64))
(fma.f64 (*.f64 x (*.f64 x x)) (/.f64 x #s(literal 1 binary64)) #s(literal 0 binary64))
(fma.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))) #s(literal 0 binary64))
(fma.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 x x))) #s(literal 0 binary64))
(fma.f64 (pow.f64 (*.f64 x x) #s(literal 1 binary64)) (pow.f64 (*.f64 x x) #s(literal 1 binary64)) #s(literal 0 binary64))
(/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 1 binary64))
(/.f64 #s(literal 1 binary64) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 x x))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))))
(/.f64 (neg.f64 (*.f64 (*.f64 x x) (*.f64 x x))) #s(literal -1 binary64))
(/.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))))
(/.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))) (*.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))))
(/.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 x x)))
(/.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))) (*.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 x x))))
(/.f64 (neg.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))))) (neg.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))))
(/.f64 (neg.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))) (neg.f64 (*.f64 (*.f64 x x) (*.f64 x x))))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))) (neg.f64 (*.f64 (*.f64 x x) (*.f64 x x))))
(/.f64 (-.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))) #s(literal 0 binary64)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))))
(pow.f64 x #s(literal 4 binary64))
(pow.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 x (*.f64 x (*.f64 x x)))
(*.f64 x (/.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64)))
(*.f64 (*.f64 x x) (*.f64 x x))
(*.f64 (*.f64 x x) (/.f64 (*.f64 x x) #s(literal 1 binary64)))
(*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 1 binary64))
(*.f64 (*.f64 x (*.f64 x x)) x)
(*.f64 (*.f64 x (*.f64 x x)) (/.f64 x #s(literal 1 binary64)))
(*.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))))
(*.f64 (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 x x))))
(*.f64 (pow.f64 (*.f64 x x) #s(literal 1 binary64)) (pow.f64 (*.f64 x x) #s(literal 1 binary64)))
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)
(exp.f64 (*.f64 (log.f64 (*.f64 (*.f64 x x) (*.f64 x x))) #s(literal -1 binary64)))
(neg.f64 (/.f64 #s(literal -1 binary64) (*.f64 (*.f64 x x) (*.f64 x x))))
(/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 x x)))
(/.f64 #s(literal 1 binary64) (neg.f64 (neg.f64 (*.f64 (*.f64 x x) (*.f64 x x)))))
(/.f64 #s(literal -1 binary64) (neg.f64 (*.f64 (*.f64 x x) (*.f64 x x))))
(/.f64 (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x))) x)
(/.f64 (/.f64 #s(literal 1 binary64) (*.f64 x x)) (*.f64 x x))
(/.f64 (/.f64 #s(literal 1 binary64) x) (*.f64 x (*.f64 x x)))
(pow.f64 (*.f64 x x) #s(literal -2 binary64))
(pow.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal -1 binary64))
(*.f64 #s(literal 1 binary64) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 x x))))
(*.f64 (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 x x))) #s(literal 1 binary64))
(*.f64 #s(literal -1 binary64) (/.f64 #s(literal 1 binary64) (neg.f64 (*.f64 (*.f64 x x) (*.f64 x x)))))
(*.f64 (pow.f64 x #s(literal -1 binary64)) (pow.f64 (*.f64 x (*.f64 x x)) #s(literal -1 binary64)))
(*.f64 (pow.f64 (*.f64 x (*.f64 x x)) #s(literal -1 binary64)) (pow.f64 x #s(literal -1 binary64)))
(*.f64 (pow.f64 (*.f64 x x) #s(literal -1 binary64)) (pow.f64 (*.f64 x x) #s(literal -1 binary64)))
(*.f64 (pow.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal -1/2 binary64)) (pow.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal -1/2 binary64)))
(*.f64 (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))))) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))))
(*.f64 (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))) (*.f64 (*.f64 x x) (*.f64 x x)))

simplify43.0ms (1.7%)

Memory
-8.3MiB live, 31.1MiB allocated
Algorithm
egg-herbie
Rules
142×lower-*.f64
142×lower-fma.f64
142×lower-fma.f32
142×lower-*.f32
96×lower-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
021356
140356
285356
3141356
4157356
5203356
6248356
7279356
8340356
9354356
10354356
0354356
Stop Event
iter limit
saturated
Counts
84 → 84
Calls
Call 1
Inputs
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(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)))
(* -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))
(* (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)
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
Outputs
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 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 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(* -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 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))

eval44.0ms (1.7%)

Memory
4.3MiB live, 42.6MiB allocated
Compiler

Compiled 4 729 to 490 computations (89.6% saved)

prune19.0ms (0.7%)

Memory
1.9MiB live, 41.7MiB allocated
Pruning

7 alts after pruning (2 fresh and 5 done)

PrunedKeptTotal
New2092211
Fresh000
Picked112
Done044
Total2107217
Accuracy
100.0%
Counts
217 → 7
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
6.9%
(sqrt.f64 (+.f64 x x))
51.8%
(sqrt.f64 (*.f64 (+.f64 x x) x))
20.7%
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))
3.9%
#s(literal 0 binary64)
Compiler

Compiled 57 to 33 computations (42.1% saved)

simplify294.0ms (11.3%)

Memory
-37.5MiB live, 383.4MiB allocated
Algorithm
egg-herbie
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x)
cost-diff0
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))
cost-diff64
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
cost-diff3264
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x)))
Rules
8 158×lower-fma.f32
8 156×lower-fma.f64
6 070×lower-*.f32
6 058×lower-*.f64
1 878×cube-prod
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
013122
024109
15177
216243
386043
4385943
5475443
6656243
0801740
Stop Event
iter limit
node limit
iter limit
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))
(*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x)
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x)))
(*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
(*.f64 x x)
x
#s(literal 0 binary64)
(+.f64 x x)
(/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))
#s(literal 1 binary64)
(*.f64 (*.f64 x (*.f64 x x)) x)
(*.f64 x (*.f64 x x))
Outputs
#s(literal 0 binary64)
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x)
(*.f64 x (+.f64 x x))
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x)))
(+.f64 x x)
(*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))
(*.f64 (*.f64 x x) (*.f64 x (*.f64 x (+.f64 x x))))
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
(*.f64 x (*.f64 x (*.f64 x x)))
(*.f64 x x)
x
#s(literal 0 binary64)
(+.f64 x x)
(/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))
(/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x))))
#s(literal 1 binary64)
(*.f64 (*.f64 x (*.f64 x x)) x)
(*.f64 x (*.f64 x (*.f64 x x)))
(*.f64 x (*.f64 x x))

localize46.0ms (1.8%)

Memory
8.2MiB live, 86.1MiB allocated
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
accuracy99.8%
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
accuracy99.8%
(/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))
accuracy51.8%
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))
accuracy23.7%
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x)))
Samples
29.0ms256×0valid
Compiler

Compiled 124 to 16 computations (87.1% saved)

Precisions
Click to see histograms. Total time spent on operations: 21.0ms
ival-mult: 11.0ms (53.6% of total)
ival-div: 5.0ms (24.4% of total)
ival-add: 2.0ms (9.7% of total)
ival-sqrt: 2.0ms (9.7% 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.8MiB live, 1.8MiB allocated
Counts
5 → 60
Calls
Call 1
Inputs
#<alt (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x)))>
#<alt (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))>
#<alt (sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))>
#<alt (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x)>
#<alt (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))>
Outputs
#<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 (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (pow x 4)>
#<alt (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)))>
#<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 (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
#<alt (/ 1 (pow x 4))>
Calls

15 calls:

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

rewrite61.0ms (2.3%)

Memory
17.5MiB live, 93.6MiB allocated
Algorithm
batch-egg-rewrite
Rules
236×lower-*.f32
230×lower-*.f64
160×lower-/.f32
160×lower-fma.f32
158×lower-/.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01388
02457
19111
077011
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
5 → 64
Calls
Call 1
Inputs
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x)))
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))
(*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x)
(/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))
Outputs
#s(literal 0 binary64)
(+.f64 #s(literal 0 binary64) (*.f64 x (*.f64 x (*.f64 x x))))
(+.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal 0 binary64))
(exp.f64 (*.f64 (log.f64 (*.f64 x x)) #s(literal 2 binary64)))
(-.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal 0 binary64))
(fma.f64 x (*.f64 x (*.f64 x x)) #s(literal 0 binary64))
(fma.f64 x (/.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64)) #s(literal 0 binary64))
(fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))
(fma.f64 (*.f64 x x) (/.f64 (*.f64 x x) #s(literal 1 binary64)) #s(literal 0 binary64))
(fma.f64 (*.f64 x (*.f64 x x)) x #s(literal 0 binary64))
(fma.f64 (*.f64 x (*.f64 x x)) (/.f64 x #s(literal 1 binary64)) #s(literal 0 binary64))
(fma.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal 1 binary64) #s(literal 0 binary64))
(fma.f64 (*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))) #s(literal 0 binary64))
(fma.f64 (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64))
(fma.f64 (pow.f64 (*.f64 x x) #s(literal 1 binary64)) (pow.f64 (*.f64 x x) #s(literal 1 binary64)) #s(literal 0 binary64))
(/.f64 #s(literal 1 binary64) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))) (*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))))
(/.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal 1 binary64))
(/.f64 (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal -1 binary64))
(/.f64 (*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))))
(/.f64 (*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))) (*.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))))
(/.f64 (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))) (*.f64 x (*.f64 x (*.f64 x x))))
(/.f64 (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))) (*.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (neg.f64 (*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))))) (neg.f64 (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))))
(/.f64 (neg.f64 (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))) (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (-.f64 (*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))) #s(literal 0 binary64)) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))) (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))))
(pow.f64 x #s(literal 4 binary64))
(pow.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 x (*.f64 x (*.f64 x x)))
(*.f64 x (/.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64)))
(*.f64 (*.f64 x x) (*.f64 x x))
(*.f64 (*.f64 x x) (/.f64 (*.f64 x x) #s(literal 1 binary64)))
(*.f64 (*.f64 x (*.f64 x x)) x)
(*.f64 (*.f64 x (*.f64 x x)) (/.f64 x #s(literal 1 binary64)))
(*.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal 1 binary64))
(*.f64 (*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))))
(*.f64 (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))))
(*.f64 (pow.f64 (*.f64 x x) #s(literal 1 binary64)) (pow.f64 (*.f64 x x) #s(literal 1 binary64)))
#s(literal 0 binary64)
#s(literal 0 binary64)
(exp.f64 (*.f64 (log.f64 (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal -1 binary64)))
(neg.f64 (/.f64 #s(literal -1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x))))
(/.f64 #s(literal 1 binary64) (neg.f64 (neg.f64 (*.f64 x (*.f64 x (*.f64 x x))))))
(/.f64 #s(literal 1 binary64) (/.f64 x (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x)))))
(/.f64 #s(literal -1 binary64) (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x))) x)
(/.f64 (neg.f64 (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x)))) (neg.f64 x))
(/.f64 (/.f64 #s(literal 1 binary64) (*.f64 x x)) (*.f64 x x))
(/.f64 (/.f64 #s(literal 1 binary64) x) (*.f64 x (*.f64 x x)))
(pow.f64 (*.f64 x x) #s(literal -2 binary64))
(pow.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal -1 binary64))
(*.f64 #s(literal 1 binary64) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))))
(*.f64 (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 1 binary64))
(*.f64 #s(literal -1 binary64) (/.f64 #s(literal 1 binary64) (neg.f64 (*.f64 x (*.f64 x (*.f64 x x))))))
(*.f64 (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x))) (pow.f64 x #s(literal -1 binary64)))
(*.f64 (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x))) (/.f64 #s(literal 1 binary64) x))
(*.f64 (pow.f64 x #s(literal -1 binary64)) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x))))
(*.f64 (pow.f64 (*.f64 x x) #s(literal -1 binary64)) (pow.f64 (*.f64 x x) #s(literal -1 binary64)))
(*.f64 (pow.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal -1/2 binary64)) (pow.f64 (*.f64 x (*.f64 x (*.f64 x x))) #s(literal -1/2 binary64)))
(*.f64 (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))))) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x)))))
(*.f64 (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (*.f64 (*.f64 x (*.f64 x x)) (*.f64 x (*.f64 x x))))) (*.f64 x (*.f64 x (*.f64 x x))))

simplify11.0ms (0.4%)

Memory
-18.6MiB live, 18.8MiB allocated
Algorithm
egg-herbie
Rules
38×lower-*.f64
38×lower-fma.f64
38×lower-fma.f32
38×lower-*.f32
36×lower-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
013244
123244
237244
341244
445244
557244
669244
780244
8100244
9105244
0105244
Stop Event
iter limit
saturated
Counts
60 → 60
Calls
Call 1
Inputs
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(pow x 4)
(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)))
(* -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))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
(/ 1 (pow x 4))
Outputs
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 binary64))
(pow x 4)
(pow.f64 x #s(literal 4 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 #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))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))
(/ 1 (pow x 4))
(/.f64 #s(literal 1 binary64) (pow.f64 x #s(literal 4 binary64)))

eval11.0ms (0.4%)

Memory
28.6MiB live, 28.6MiB allocated
Compiler

Compiled 2 665 to 344 computations (87.1% saved)

prune18.0ms (0.7%)

Memory
-5.7MiB live, 34.4MiB allocated
Pruning

7 alts after pruning (1 fresh and 6 done)

PrunedKeptTotal
New1231124
Fresh000
Picked112
Done055
Total1247131
Accuracy
100.0%
Counts
131 → 7
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
6.9%
(sqrt.f64 (+.f64 x x))
51.8%
(sqrt.f64 (*.f64 (+.f64 x x) x))
20.7%
(sqrt.f64 (*.f64 (*.f64 (*.f64 (*.f64 (*.f64 x (*.f64 x x)) x) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))
3.9%
#s(literal 0 binary64)
Compiler

Compiled 165 to 63 computations (61.8% saved)

regimes15.0ms (0.6%)

Memory
-4.3MiB live, 34.2MiB allocated
Counts
10 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (*.f64 (+.f64 x x) x))
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt.f64 (*.f64 (*.f64 (*.f64 (*.f64 (*.f64 x (*.f64 x x)) x) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (*.f64 (*.f64 x (*.f64 x x)) x))) x))
(sqrt.f64 (*.f64 (*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))) x))
(hypot.f64 x x)
Outputs
(hypot.f64 x x)
Calls

4 calls:

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

Compiled 23 to 10 computations (56.5% saved)

regimes14.0ms (0.5%)

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

4 calls:

4.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
3.0ms
x
3.0ms
(*.f64 x x)
3.0ms
(+.f64 (*.f64 x x) (*.f64 x x))
Results
AccuracySegmentsBranch
99.5%1x
99.5%1(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
99.5%1(+.f64 (*.f64 x x) (*.f64 x x))
99.5%1(*.f64 x x)
Compiler

Compiled 23 to 10 computations (56.5% saved)

regimes9.0ms (0.3%)

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

4 calls:

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

Compiled 23 to 10 computations (56.5% saved)

regimes7.0ms (0.3%)

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

4 calls:

3.0ms
(*.f64 x x)
2.0ms
x
1.0ms
(+.f64 (*.f64 x x) (*.f64 x x))
1.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Results
AccuracySegmentsBranch
6.9%1x
6.9%1(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
6.9%1(+.f64 (*.f64 x x) (*.f64 x x))
6.9%1(*.f64 x x)
Compiler

Compiled 23 to 10 computations (56.5% saved)

regimes5.0ms (0.2%)

Memory
10.5MiB live, 10.5MiB 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
(+.f64 (*.f64 x x) (*.f64 x x))
1.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
1.0ms
(*.f64 x x)
Results
AccuracySegmentsBranch
3.9%1x
3.9%1(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
3.9%1(+.f64 (*.f64 x x) (*.f64 x x))
3.9%1(*.f64 x x)
Compiler

Compiled 23 to 10 computations (56.5% saved)

simplify5.0ms (0.2%)

Memory
9.5MiB live, 9.5MiB allocated
Algorithm
egg-herbie
Rules
*-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01019
11219
Stop Event
saturated
Calls
Call 1
Inputs
(hypot.f64 x x)
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (+.f64 x x))
#s(literal 0 binary64)
Outputs
(hypot.f64 x x)
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (+.f64 x x))
#s(literal 0 binary64)

soundness355.0ms (13.7%)

Memory
-24.7MiB live, 214.5MiB allocated
Rules
220×lower-*.f32
218×lower-*.f64
160×lower-fma.f32
158×lower-fma.f64
144×lower-/.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0418
0714
12310
01609
01299
02287
18513
078413
01136
02230
15026
025526
08148
115148
232148
337148
441148
553148
665148
776148
896148
9101148
0101148
Stop Event
fuel
iter limit
saturated
iter limit
iter limit
iter limit
unsound
iter limit
iter limit
iter limit
iter limit
unsound
iter limit
iter limit
iter limit
iter limit
unsound
iter limit
Compiler

Compiled 57 to 33 computations (42.1% saved)

preprocess106.0ms (4.1%)

Memory
12.3MiB live, 90.1MiB allocated
Remove

(abs x)

Compiler

Compiled 66 to 32 computations (51.5% saved)

end0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated

Profiling

Loading profile data...