FastMath dist

Time bar (total: 1.8s)

analyze0.0ms (0%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%99.9%0.1%0%0%0%0
100%99.9%0%0.1%0%0%0%1
Compiler

Compiled 11 to 7 computations (36.4% saved)

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

sample727.0ms (40.6%)

Results
547.0ms8256×0valid
Precisions
Click to see histograms. Total time spent on operations: 186.0ms
ival-mult: 132.0ms (71% of total)
ival-add: 43.0ms (23.1% of total)
const: 8.0ms (4.3% of total)
backward-pass: 3.0ms (1.6% of total)
Bogosity

preprocess56.0ms (3.1%)

Algorithm
egg-herbie
Rules
1052×fnmadd-define
798×fmsub-define
780×fnmsub-define
688×sum5-define
658×fma-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
02655
18453
223851
372551
4198251
5341551
6396851
7398851
065
1125
2185
0185
Stop Event
iter limit
saturated
saturated
Calls
Call 1
Inputs
(+ (* d1 d2) (* d1 d3))
Outputs
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
Call 2
Inputs
(+ (* d1 d2) (* d1 d3))
(+ (* (neg d1) d2) (* (neg d1) d3))
(+ (* d1 (neg d2)) (* d1 d3))
(+ (* d1 d2) (* d1 (neg d3)))
(neg (+ (* (neg d1) d2) (* (neg d1) d3)))
(neg (+ (* d1 (neg d2)) (* d1 d3)))
(neg (+ (* d1 d2) (* d1 (neg d3))))
(+ (* d2 d1) (* d2 d3))
(+ (* d3 d2) (* d3 d1))
(+ (* d1 d3) (* d1 d2))
Outputs
(+ (* d1 d2) (* d1 d3))
(* d1 (+ d2 d3))
(+ (* (neg d1) d2) (* (neg d1) d3))
(fnmsub d1 d2 (* d1 d3))
(+ (* d1 (neg d2)) (* d1 d3))
(* d1 (- d3 d2))
(+ (* d1 d2) (* d1 (neg d3)))
(* d1 (- d2 d3))
(neg (+ (* (neg d1) d2) (* (neg d1) d3)))
(* d1 (+ d2 d3))
(neg (+ (* d1 (neg d2)) (* d1 d3)))
(* d1 (- d2 d3))
(neg (+ (* d1 d2) (* d1 (neg d3))))
(* d1 (- d3 d2))
(+ (* d2 d1) (* d2 d3))
(* d2 (+ d1 d3))
(+ (* d3 d2) (* d3 d1))
(* d3 (+ d1 d2))
(+ (* d1 d3) (* d1 d2))
(* d1 (+ d2 d3))
Symmetry

(negabs d1)

(sort d2 d3)

explain111.0ms (6.2%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
20-0-(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
00-0-(*.f64 d1 d3)
00-0-(*.f64 d1 d2)
00-0-d3
00-0-d1
00-0-d2
Results
91.0ms512×0valid
Compiler

Compiled 50 to 20 computations (60% saved)

Precisions
Click to see histograms. Total time spent on operations: 57.0ms
ival-mult: 53.0ms (93.6% of total)
ival-add: 2.0ms (3.5% of total)
const: 1.0ms (1.8% of total)
backward-pass: 0.0ms (0% of total)

eval0.0ms (0%)

Compiler

Compiled 8 to 5 computations (37.5% saved)

prune1.0ms (0.1%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
99.2%
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
100.0%
(*.f64 d1 (+.f64 d2 d3))
Compiler

Compiled 18 to 11 computations (38.9% saved)

simplify5.0ms (0.3%)

Algorithm
egg-herbie
Localize:

Found 5 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d1 d3)
cost-diff0
(*.f64 d1 d2)
cost-diff128
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
cost-diff0
(+.f64 d2 d3)
cost-diff0
(*.f64 d1 (+.f64 d2 d3))
Rules
12×*-lowering-*.f32
12×*-lowering-*.f64
fma-lowering-fma.f32
fma-define
+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0825
11525
21825
01825
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* d1 (+ d2 d3))
d1
(+ d2 d3)
d2
d3
(+ (* d1 d2) (* d1 d3))
(* d1 d2)
d1
d2
(* d1 d3)
d3
Outputs
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
d1
(+ d2 d3)
(+.f64 d2 d3)
d2
d3
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
d1
d2
(* d1 d3)
(*.f64 d1 d3)
d3

localize43.0ms (2.4%)

Localize:

Found 5 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d1 d3)
accuracy100.0%
(*.f64 d1 d2)
accuracy99.2%
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
accuracy100.0%
(+.f64 d2 d3)
accuracy100.0%
(*.f64 d1 (+.f64 d2 d3))
Results
34.0ms256×0valid
Compiler

Compiled 31 to 9 computations (71% saved)

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

series8.0ms (0.4%)

Counts
5 → 144
Calls
Call 1
Inputs
#<alt (* d1 (+ d2 d3))>
#<alt (+ d2 d3)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d2)>
#<alt (* d1 d3)>
Outputs
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 d3)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* d1 d2)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt d3>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt d2>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt d2>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt d2>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt d3>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt d3>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* d1 d3)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* d1 d2)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
Calls

36 calls:

TimeVariablePointExpression
1.0ms
d1
@inf
(+ (* d1 d2) (* d1 d3))
1.0ms
d1
@0
(+ (* d1 d2) (* d1 d3))
0.0ms
d2
@-inf
(* d1 (+ d2 d3))
0.0ms
d1
@0
(* d1 (+ d2 d3))
0.0ms
d1
@-inf
(+ (* d1 d2) (* d1 d3))

rewrite32.0ms (1.8%)

Algorithm
batch-egg-rewrite
Rules
12×*-lowering-*.f32
12×*-lowering-*.f64
fma-lowering-fma.f32
fma-define
+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0819
11519
21819
01819
Stop Event
iter limit
saturated
Counts
5 → 22
Calls
Call 1
Inputs
(* d1 (+ d2 d3))
(+ d2 d3)
(+ (* d1 d2) (* d1 d3))
(* d1 d2)
(* d1 d3)
Outputs
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 d3))
(fma.f64 d1 d3 (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 d3))
(fma.f64 d3 d1 (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 d3))
(*.f64 (+.f64 d2 d3) d1)
(+.f64 d2 d3)
(+.f64 d3 d2)
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 d3))
(fma.f64 d1 d3 (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 d3))
(fma.f64 d3 d1 (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 d3))
(*.f64 (+.f64 d2 d3) d1)
(*.f64 d1 d2)
(*.f64 d2 d1)
(*.f64 d1 d3)
(*.f64 d3 d1)

simplify181.0ms (10.1%)

Algorithm
egg-herbie
Rules
1980×fnmadd-define
1716×fmsub-define
1668×fnmsub-define
1552×times-frac
1492×fmm-def
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
044540
1159540
2451540
31397540
44865540
08120540
Stop Event
iter limit
node limit
Counts
144 → 144
Calls
Call 1
Inputs
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 d3)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* d1 d2)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
d3
(+ d2 d3)
(+ d2 d3)
(+ d2 d3)
d2
(* d2 (+ 1 (/ d3 d2)))
(* d2 (+ 1 (/ d3 d2)))
(* d2 (+ 1 (/ d3 d2)))
d2
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
d2
(+ d2 d3)
(+ d2 d3)
(+ d2 d3)
d3
(* d3 (+ 1 (/ d2 d3)))
(* d3 (+ 1 (/ d2 d3)))
(* d3 (+ 1 (/ d2 d3)))
d3
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* d1 d3)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* d1 d2)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
Outputs
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
d3
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
d2
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d2 d3)
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d2 d3)
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d2 d3)
d2
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d2 d3)
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d2 d3)
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d2 d3)
d2
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
d3
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d2 d3)
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d2 d3)
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d2 d3)
d3
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d2 d3)
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d2 d3)
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d2 d3)
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)

eval16.0ms (0.9%)

Compiler

Compiled 917 to 20 computations (97.8% saved)

prune3.0ms (0.2%)

Pruning

4 alts after pruning (2 fresh and 2 done)

PrunedKeptTotal
New1642166
Fresh000
Picked022
Done000
Total1644168
Accuracy
100.0%
Counts
168 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.2%
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
100.0%
(*.f64 d1 (+.f64 d2 d3))
53.2%
(*.f64 d1 d3)
55.1%
(*.f64 d1 d2)
Compiler

Compiled 30 to 19 computations (36.7% saved)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 2 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d1 d3)
cost-diff0
(*.f64 d1 d2)
Rules
*-lowering-*.f32
*-lowering-*.f64
*-commutative
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0510
1710
0710
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* d1 d2)
d1
d2
(* d1 d3)
d1
d3
Outputs
(* d1 d2)
(*.f64 d1 d2)
d1
d2
(* d1 d3)
(*.f64 d1 d3)
d1
d3

localize44.0ms (2.4%)

Localize:

Found 2 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d1 d3)
accuracy100.0%
(*.f64 d1 d2)
Results
29.0ms256×0valid
Compiler

Compiled 14 to 6 computations (57.1% saved)

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

series0.0ms (0%)

Counts
2 → 48
Calls
Call 1
Inputs
#<alt (* d1 d2)>
#<alt (* d1 d3)>
Outputs
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
Calls

12 calls:

TimeVariablePointExpression
0.0ms
d1
@0
(* d1 d2)
0.0ms
d1
@-inf
(* d1 d2)
0.0ms
d1
@inf
(* d1 d2)
0.0ms
d1
@-inf
(* d1 d3)
0.0ms
d3
@-inf
(* d1 d3)

rewrite12.0ms (0.7%)

Algorithm
batch-egg-rewrite
Rules
*-lowering-*.f32
*-lowering-*.f64
*-commutative
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
056
176
076
Stop Event
iter limit
saturated
Counts
2 → 4
Calls
Call 1
Inputs
(* d1 d2)
(* d1 d3)
Outputs
(*.f64 d1 d2)
(*.f64 d2 d1)
(*.f64 d1 d3)
(*.f64 d3 d1)

simplify9.0ms (0.5%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
05144
17144
07144
Stop Event
iter limit
saturated
Counts
48 → 48
Calls
Call 1
Inputs
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
Outputs
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)

eval5.0ms (0.3%)

Compiler

Compiled 159 to 7 computations (95.6% saved)

prune2.0ms (0.1%)

Pruning

4 alts after pruning (0 fresh and 4 done)

PrunedKeptTotal
New52052
Fresh000
Picked022
Done022
Total52456
Accuracy
100.0%
Counts
56 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.2%
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
100.0%
(*.f64 d1 (+.f64 d2 d3))
53.2%
(*.f64 d1 d3)
55.1%
(*.f64 d1 d2)
Compiler

Compiled 51 to 27 computations (47.1% saved)

regimes10.0ms (0.6%)

Counts
4 → 1
Calls
Call 1
Inputs
(*.f64 d1 d2)
(*.f64 d1 d3)
(*.f64 d1 (+.f64 d2 d3))
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
Outputs
(*.f64 d1 (+.f64 d2 d3))
Calls

4 calls:

3.0ms
d3
2.0ms
d1
2.0ms
d2
2.0ms
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
Results
AccuracySegmentsBranch
100.0%1d1
100.0%1d2
100.0%1d3
100.0%1(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
Compiler

Compiled 22 to 15 computations (31.8% saved)

regimes5.0ms (0.3%)

Counts
2 → 2
Calls
Call 1
Inputs
(*.f64 d1 d2)
(*.f64 d1 d3)
Outputs
(*.f64 d1 d2)
(*.f64 d1 d3)
Calls

3 calls:

2.0ms
d3
1.0ms
d2
1.0ms
d1
Results
AccuracySegmentsBranch
62.6%4d1
87.7%2d2
83.4%2d3
Compiler

Compiled 12 to 9 computations (25% saved)

regimes4.0ms (0.2%)

Accuracy

Total -0.0b remaining (-0%)

Threshold costs -0b (-0%)

Counts
1 → 1
Calls
Call 1
Inputs
(*.f64 d1 d2)
Outputs
(*.f64 d1 d2)
Calls

3 calls:

1.0ms
d1
1.0ms
d3
1.0ms
d2
Results
AccuracySegmentsBranch
55.1%1d1
55.1%1d3
55.1%1d2
Compiler

Compiled 12 to 9 computations (25% saved)

bsearch29.0ms (1.6%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
28.0ms
-3.466860550113693e-130
-9.711759403144233e-132
Results
24.0ms112×0valid
Compiler

Compiled 114 to 81 computations (28.9% saved)

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

simplify7.0ms (0.4%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
+-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01018
11418
Stop Event
saturated
Calls
Call 1
Inputs
(*.f64 d1 (+.f64 d2 d3))
(if (<=.f64 d2 #s(literal -8491156056859499/24973988402527937851052777838345330445988785141319769206873255677002973910558124960962448824507935769278615448971252983163583805434306282450321408 binary64)) (*.f64 d1 d2) (*.f64 d1 d3))
(*.f64 d1 d2)
Outputs
(*.f64 d1 (+.f64 d2 d3))
(if (<=.f64 d2 #s(literal -8491156056859499/24973988402527937851052777838345330445988785141319769206873255677002973910558124960962448824507935769278615448971252983163583805434306282450321408 binary64)) (*.f64 d1 d2) (*.f64 d1 d3))
(*.f64 d1 d2)

soundness433.0ms (24.2%)

Rules
1980×fnmadd-define
1716×fmsub-define
1668×fnmsub-define
1552×times-frac
1492×fmm-def
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
065
1125
2185
0185
044540
1159540
2451540
31397540
44865540
08120540
Stop Event
done
iter limit
node limit
iter limit
saturated
Compiler

Compiled 71 to 42 computations (40.8% saved)

preprocess41.0ms (2.3%)

Remove

(sort d2 d3)

(negabs d1)

Compiler

Compiled 142 to 82 computations (42.3% saved)

end0.0ms (0%)

Profiling

Loading profile data...