Exp of sum of logs

Time bar (total: 1.0s)

start0.0ms (0%)

Memory
0.1MiB live, 0.1MiB allocated; 0ms collecting garbage

analyze1.0ms (0.1%)

Memory
0.7MiB live, 0.7MiB allocated; 0ms collecting garbage
Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%99.9%0.1%0%0%0%0
0%0%99.9%0.1%0%0%0%1
0%0%50%0.1%0%50%0%2
100%25%0%0.1%0%74.9%0%3
Compiler

Compiled 8 to 8 computations (0% saved)

sample713.0ms (68.9%)

Memory
-18.9MiB live, 656.4MiB allocated; 152ms collecting garbage
Samples
519.0ms8 244×0valid
2.0ms12×1valid
Precisions
Click to see histograms. Total time spent on operations: 360.0ms
ival-log: 253.0ms (70.3% of total)
ival-exp: 83.0ms (23.1% of total)
ival-add!: 22.0ms (6.1% of total)
adjust: 2.0ms (0.6% of total)
Bogosity

preprocess56.0ms (5.4%)

Memory
30.6MiB live, 30.6MiB allocated; 0ms collecting garbage
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01830
16018
227018
3107618
Stop Event
iter-limit
node-limit
Alt Table
Click to see full alt table
StatusAccuracyProgram
92.4%
(exp.f64 (+.f64 (log.f64 a) (log.f64 b)))
Symmetry

(abs a)

(abs b)

(negabs a)

(negabs b)

(sort a b)

Compiler

Compiled 12 to 12 computations (0% saved)

series147.0ms (14.2%)

Memory
-26.3MiB live, 114.1MiB allocated; 18ms collecting garbage
Counts
6 → 12
Calls
Call 1
Inputs
(exp.f64 (+.f64 (log.f64 a) (log.f64 b)))
(+.f64 (log.f64 a) (log.f64 b))
(log.f64 a)
a
(log.f64 b)
b
Outputs
#s(approx (exp (+ (log a) (log b))) #s(hole binary64 (exp (+ (log a) (log b)))))
#s(approx (+ (log a) (log b)) #s(hole binary64 (+ (log a) (log b))))
#s(approx (log a) #s(hole binary64 (log a)))
#s(approx a #s(hole binary64 a))
#s(approx (exp (+ (log a) (log b))) #s(hole binary64 (exp (+ (log b) (* -1 (log (/ 1 a)))))))
#s(approx (+ (log a) (log b)) #s(hole binary64 (+ (log b) (* -1 (log (/ 1 a))))))
#s(approx (log a) #s(hole binary64 (* -1 (log (/ 1 a)))))
#s(approx (log b) #s(hole binary64 (log b)))
#s(approx b #s(hole binary64 b))
#s(approx (exp (+ (log a) (log b))) #s(hole binary64 (exp (+ (log a) (* -1 (log (/ 1 b)))))))
#s(approx (+ (log a) (log b)) #s(hole binary64 (+ (log a) (* -1 (log (/ 1 b))))))
#s(approx (log b) #s(hole binary64 (* -1 (log (/ 1 b)))))
Calls

6 calls:

TimeVariablePointExpression
61.0ms
a
@0
((exp (+ (log a) (log b))) (+ (log a) (log b)) (log a) a (log b) b)
24.0ms
b
@-inf
((exp (+ (log a) (log b))) (+ (log a) (log b)) (log a) a (log b) b)
18.0ms
b
@0
((exp (+ (log a) (log b))) (+ (log a) (log b)) (log a) a (log b) b)
18.0ms
a
@-inf
((exp (+ (log a) (log b))) (+ (log a) (log b)) (log a) a (log b) b)
12.0ms
b
@inf
((exp (+ (log a) (log b))) (+ (log a) (log b)) (log a) a (log b) b)

rewrite49.0ms (4.8%)

Memory
28.2MiB live, 28.2MiB allocated; 0ms collecting garbage
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
034139
038101
114387
0128487
Stop Event
iter-limit
iter-limit
node-limit
iter-limit
Counts
18 → 79
Calls
Call 1
Inputs
(exp.f64 (+.f64 (log.f64 a) (log.f64 b)))
(+.f64 (log.f64 a) (log.f64 b))
(log.f64 a)
a
(log.f64 b)
b
#s(approx (exp (+ (log a) (log b))) #s(hole binary64 (exp (+ (log a) (log b)))))
#s(approx (+ (log a) (log b)) #s(hole binary64 (+ (log a) (log b))))
#s(approx (log a) #s(hole binary64 (log a)))
#s(approx a #s(hole binary64 a))
#s(approx (exp (+ (log a) (log b))) #s(hole binary64 (exp (+ (log b) (* -1 (log (/ 1 a)))))))
#s(approx (+ (log a) (log b)) #s(hole binary64 (+ (log b) (* -1 (log (/ 1 a))))))
#s(approx (log a) #s(hole binary64 (* -1 (log (/ 1 a)))))
#s(approx (log b) #s(hole binary64 (log b)))
#s(approx b #s(hole binary64 b))
#s(approx (exp (+ (log a) (log b))) #s(hole binary64 (exp (+ (log a) (* -1 (log (/ 1 b)))))))
#s(approx (+ (log a) (log b)) #s(hole binary64 (+ (log a) (* -1 (log (/ 1 b))))))
#s(approx (log b) #s(hole binary64 (* -1 (log (/ 1 b)))))
Outputs
(*.f64 (+.f64 #s(literal 1 binary64) (/.f64 (sinh.f64 (log.f64 (*.f64 b a))) (cosh.f64 (log.f64 (*.f64 b a))))) (cosh.f64 (log.f64 (*.f64 b a))))
(*.f64 b a)
(*.f64 a b)
(pow.f64 (exp.f64 (+.f64 (/.f64 (log.f64 b) (log.f64 a)) #s(literal 1 binary64))) (log.f64 a))
(pow.f64 (exp.f64 (+.f64 (/.f64 (log.f64 a) (log.f64 b)) #s(literal 1 binary64))) (log.f64 b))
(/.f64 (-.f64 (*.f64 (cosh.f64 (log.f64 (*.f64 b a))) (cosh.f64 (log.f64 (*.f64 b a)))) (*.f64 (sinh.f64 (log.f64 (*.f64 b a))) (sinh.f64 (log.f64 (*.f64 b a))))) (-.f64 (cosh.f64 (log.f64 (*.f64 b a))) (sinh.f64 (log.f64 (*.f64 b a)))))
(/.f64 (+.f64 (pow.f64 (cosh.f64 (log.f64 (*.f64 b a))) #s(literal 3 binary64)) (pow.f64 (sinh.f64 (log.f64 (*.f64 b a))) #s(literal 3 binary64))) (fma.f64 (cosh.f64 (log.f64 (*.f64 b a))) (cosh.f64 (log.f64 (*.f64 b a))) (-.f64 (*.f64 (sinh.f64 (log.f64 (*.f64 b a))) (sinh.f64 (log.f64 (*.f64 b a)))) (*.f64 (cosh.f64 (log.f64 (*.f64 b a))) (sinh.f64 (log.f64 (*.f64 b a)))))))
(/.f64 b (/.f64 #s(literal 1 binary64) a))
(/.f64 a (/.f64 #s(literal 1 binary64) b))
(sqrt.f64 (*.f64 (*.f64 b a) (*.f64 b a)))
(-.f64 (cosh.f64 (log.f64 (*.f64 b a))) (neg.f64 (sinh.f64 (log.f64 (*.f64 b a)))))
(fabs.f64 (neg.f64 (*.f64 b a)))
(fabs.f64 (*.f64 b a))
(exp.f64 (log.f64 (*.f64 b a)))
(+.f64 (sinh.f64 (log.f64 (*.f64 b a))) (cosh.f64 (log.f64 (*.f64 b a))))
(+.f64 (cosh.f64 (log.f64 (*.f64 b a))) (sinh.f64 (log.f64 (*.f64 b a))))
(*.f64 (-.f64 #s(literal 1 binary64) (/.f64 (neg.f64 (log.f64 a)) (log.f64 b))) (log.f64 b))
(*.f64 (-.f64 #s(literal 1 binary64) (/.f64 (neg.f64 (log.f64 b)) (log.f64 a))) (log.f64 a))
(*.f64 (*.f64 (log.f64 (*.f64 b a)) (log.f64 (/.f64 b a))) (/.f64 #s(literal 1 binary64) (log.f64 (/.f64 b a))))
(*.f64 (+.f64 (/.f64 (log.f64 a) (log.f64 b)) #s(literal 1 binary64)) (log.f64 b))
(*.f64 (+.f64 (/.f64 (log.f64 b) (log.f64 a)) #s(literal 1 binary64)) (log.f64 a))
(*.f64 (*.f64 (log.f64 (*.f64 b a)) (log.f64 (/.f64 a b))) (/.f64 #s(literal 1 binary64) (log.f64 (/.f64 a b))))
(*.f64 (+.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (pow.f64 (log.f64 a) #s(literal 3 binary64))) (/.f64 #s(literal 1 binary64) (fma.f64 (log.f64 b) (log.f64 b) (*.f64 (log.f64 a) (log.f64 (/.f64 a b))))))
(*.f64 (+.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (pow.f64 (log.f64 a) #s(literal 3 binary64))) (/.f64 #s(literal 1 binary64) (fma.f64 (log.f64 b) (log.f64 (/.f64 b a)) (*.f64 (log.f64 a) (log.f64 a)))))
(*.f64 (log.f64 b) (+.f64 (/.f64 (log.f64 a) (log.f64 b)) #s(literal 1 binary64)))
(*.f64 (log.f64 a) (+.f64 (/.f64 (log.f64 b) (log.f64 a)) #s(literal 1 binary64)))
(/.f64 (-.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (pow.f64 (neg.f64 (log.f64 a)) #s(literal 3 binary64))) (fma.f64 (log.f64 b) (log.f64 b) (fma.f64 (log.f64 a) (log.f64 a) (*.f64 (log.f64 b) (neg.f64 (log.f64 a))))))
(/.f64 (-.f64 (pow.f64 (log.f64 a) #s(literal 3 binary64)) (pow.f64 (neg.f64 (log.f64 b)) #s(literal 3 binary64))) (fma.f64 (log.f64 a) (log.f64 a) (fma.f64 (log.f64 b) (log.f64 b) (*.f64 (log.f64 a) (neg.f64 (log.f64 b))))))
(/.f64 (*.f64 (log.f64 (*.f64 b a)) (log.f64 (/.f64 b a))) (log.f64 (/.f64 b a)))
(/.f64 (neg.f64 (+.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (pow.f64 (log.f64 a) #s(literal 3 binary64)))) (neg.f64 (fma.f64 (log.f64 b) (log.f64 b) (*.f64 (log.f64 a) (log.f64 (/.f64 a b))))))
(/.f64 (neg.f64 (+.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (pow.f64 (log.f64 a) #s(literal 3 binary64)))) (neg.f64 (fma.f64 (log.f64 b) (log.f64 (/.f64 b a)) (*.f64 (log.f64 a) (log.f64 a)))))
(/.f64 (*.f64 (log.f64 (*.f64 b a)) (log.f64 (/.f64 a b))) (log.f64 (/.f64 a b)))
(/.f64 (+.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (pow.f64 (log.f64 a) #s(literal 3 binary64))) (fma.f64 (log.f64 b) (log.f64 b) (*.f64 (log.f64 a) (log.f64 (/.f64 a b)))))
(/.f64 (+.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (pow.f64 (log.f64 a) #s(literal 3 binary64))) (fma.f64 (log.f64 b) (log.f64 (/.f64 b a)) (*.f64 (log.f64 a) (log.f64 a))))
(/.f64 #s(literal 1 binary64) (/.f64 (log.f64 (/.f64 b a)) (*.f64 (log.f64 (*.f64 b a)) (log.f64 (/.f64 b a)))))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 (log.f64 b) (log.f64 b) (*.f64 (log.f64 a) (log.f64 (/.f64 a b)))) (+.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (pow.f64 (log.f64 a) #s(literal 3 binary64)))))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 (log.f64 b) (log.f64 (/.f64 b a)) (*.f64 (log.f64 a) (log.f64 a))) (+.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (pow.f64 (log.f64 a) #s(literal 3 binary64)))))
(/.f64 #s(literal 1 binary64) (/.f64 (log.f64 (/.f64 a b)) (*.f64 (log.f64 (*.f64 b a)) (log.f64 (/.f64 a b)))))
(neg.f64 (-.f64 (neg.f64 (log.f64 a)) (log.f64 b)))
(neg.f64 (-.f64 (neg.f64 (log.f64 b)) (log.f64 a)))
(fma.f64 (neg.f64 (log.f64 a)) #s(literal -1 binary64) (log.f64 b))
(fma.f64 (neg.f64 (log.f64 b)) #s(literal -1 binary64) (log.f64 a))
(fma.f64 #s(literal -1 binary64) (neg.f64 (log.f64 a)) (log.f64 b))
(fma.f64 #s(literal -1 binary64) (neg.f64 (log.f64 b)) (log.f64 a))
(-.f64 (/.f64 (*.f64 (log.f64 b) (log.f64 b)) (log.f64 (/.f64 b a))) (/.f64 (*.f64 (log.f64 a) (log.f64 a)) (log.f64 (/.f64 b a))))
(-.f64 (/.f64 (*.f64 (log.f64 a) (log.f64 a)) (log.f64 (/.f64 a b))) (/.f64 (*.f64 (log.f64 b) (log.f64 b)) (log.f64 (/.f64 a b))))
(-.f64 (log.f64 b) (neg.f64 (log.f64 a)))
(-.f64 (log.f64 a) (neg.f64 (log.f64 b)))
(+.f64 (/.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (fma.f64 (log.f64 b) (log.f64 b) (*.f64 (log.f64 a) (log.f64 (/.f64 a b))))) (/.f64 (pow.f64 (log.f64 a) #s(literal 3 binary64)) (fma.f64 (log.f64 b) (log.f64 b) (*.f64 (log.f64 a) (log.f64 (/.f64 a b))))))
(+.f64 (/.f64 (pow.f64 (log.f64 a) #s(literal 3 binary64)) (fma.f64 (log.f64 b) (log.f64 (/.f64 b a)) (*.f64 (log.f64 a) (log.f64 a)))) (/.f64 (pow.f64 (log.f64 b) #s(literal 3 binary64)) (fma.f64 (log.f64 b) (log.f64 (/.f64 b a)) (*.f64 (log.f64 a) (log.f64 a)))))
(+.f64 (log.f64 b) (log.f64 a))
(+.f64 (log.f64 a) (log.f64 b))
(log.f64 (pow.f64 b (+.f64 (/.f64 (log.f64 a) (log.f64 b)) #s(literal 1 binary64))))
(log.f64 (pow.f64 a (+.f64 (/.f64 (log.f64 b) (log.f64 a)) #s(literal 1 binary64))))
(log.f64 (*.f64 b a))
(*.f64 (neg.f64 (log.f64 a)) #s(literal -1 binary64))
(*.f64 #s(literal -1 binary64) (neg.f64 (log.f64 a)))
(neg.f64 (neg.f64 (log.f64 a)))
(-.f64 (log.f64 a) #s(literal 0 binary64))
(log.f64 a)
a
(*.f64 (neg.f64 (log.f64 b)) #s(literal -1 binary64))
(*.f64 #s(literal -1 binary64) (neg.f64 (log.f64 b)))
(neg.f64 (neg.f64 (log.f64 b)))
(-.f64 (log.f64 b) #s(literal 0 binary64))
(log.f64 b)
b
#s(approx (exp (+ (log a) (log b))) (*.f64 b a))
#s(approx (+ (log a) (log b)) (log.f64 (*.f64 b a)))
#s(approx (log a) (log.f64 a))
#s(approx a a)
#s(approx (exp (+ (log a) (log b))) (*.f64 b a))
#s(approx (+ (log a) (log b)) (log.f64 (*.f64 b a)))
#s(approx (log a) (log.f64 a))
#s(approx (log b) (log.f64 b))
#s(approx b b)
#s(approx (exp (+ (log a) (log b))) (*.f64 b a))
#s(approx (+ (log a) (log b)) (log.f64 (*.f64 b a)))
#s(approx (log b) (log.f64 b))

eval7.0ms (0.6%)

Memory
11.6MiB live, 11.6MiB allocated; 0ms collecting garbage
Compiler

Compiled 591 to 222 computations (62.4% saved)

prune6.0ms (0.6%)

Memory
-40.2MiB live, 5.5MiB allocated; 3ms collecting garbage
Pruning

1 alts after pruning (1 fresh and 0 done)

PrunedKeptTotal
New67168
Fresh000
Picked101
Done000
Total68169
Accuracy
100.0%
Counts
69 → 1
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(*.f64 b a)
Compiler

Compiled 3 to 3 computations (0% saved)

series3.0ms (0.3%)

Memory
4.2MiB live, 4.2MiB allocated; 0ms collecting garbage
Counts
3 → 3
Calls
Call 1
Inputs
(*.f64 b a)
b
a
Outputs
#s(approx (* b a) #s(hole binary64 (* a b)))
#s(approx a #s(hole binary64 a))
#s(approx b #s(hole binary64 b))
Calls

6 calls:

TimeVariablePointExpression
1.0ms
b
@-inf
((* b a) b a)
1.0ms
a
@-inf
((* b a) b a)
0.0ms
a
@inf
((* b a) b a)
0.0ms
b
@inf
((* b a) b a)
0.0ms
a
@0
((* b a) b a)

rewrite7.0ms (0.6%)

Memory
6.8MiB live, 6.8MiB allocated; 0ms collecting garbage
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0818
0818
1918
0918
Stop Event
iter-limit
saturated
iter-limit
Counts
6 → 7
Calls
Call 1
Inputs
(*.f64 b a)
b
a
#s(approx (* b a) #s(hole binary64 (* a b)))
#s(approx a #s(hole binary64 a))
#s(approx b #s(hole binary64 b))
Outputs
(*.f64 a b)
(*.f64 b a)
b
a
#s(approx (* b a) (*.f64 a b))
#s(approx a a)
#s(approx b b)

eval0.0ms (0%)

Memory
0.5MiB live, 0.5MiB allocated; 0ms collecting garbage
Compiler

Compiled 10 to 9 computations (10% saved)

prune1.0ms (0.1%)

Memory
1.5MiB live, 1.5MiB allocated; 0ms collecting garbage
Pruning

1 alts after pruning (0 fresh and 1 done)

PrunedKeptTotal
New404
Fresh000
Picked011
Done000
Total415
Accuracy
100.0%
Counts
5 → 1
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(*.f64 b a)
Compiler

Compiled 10 to 10 computations (0% saved)

regimes7.0ms (0.7%)

Memory
15.6MiB live, 15.6MiB allocated; 0ms collecting garbage
Accuracy

Total -4.9b remaining (-∞%)

Threshold costs -4.9b (-∞%)

Counts
2 → 1
Calls
Call 1
Inputs
(*.f64 b a)
(exp.f64 (+.f64 (log.f64 a) (log.f64 b)))
Outputs
(*.f64 b a)
Calls

6 calls:

1.0ms
b
1.0ms
(log.f64 a)
1.0ms
(+.f64 (log.f64 a) (log.f64 b))
1.0ms
(log.f64 b)
1.0ms
(exp.f64 (+.f64 (log.f64 a) (log.f64 b)))
Results
AccuracySegmentsBranch
100.0%1(log.f64 b)
100.0%1(log.f64 a)
100.0%1(+.f64 (log.f64 a) (log.f64 b))
100.0%1(exp.f64 (+.f64 (log.f64 a) (log.f64 b)))
100.0%1a
100.0%1b
Compiler

Compiled 17 to 21 computations (-23.5% saved)

derivations3.0ms (0.3%)

Memory
3.2MiB live, 3.2MiB allocated; 0ms collecting garbage
Stop Event
done
Compiler

Compiled 3 to 3 computations (0% saved)

preprocess35.0ms (3.4%)

Memory
1.8MiB live, 48.6MiB allocated; 2ms collecting garbage
Remove

(sort a b)

(negabs b)

(negabs a)

(abs b)

(abs a)

Compiler

Compiled 42 to 42 computations (0% saved)

end0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated; 0ms collecting garbage

Profiling

Loading profile data...