Hyperbolic tangent

Time bar (total: 4.6s)

analyze0.0ms (0%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%100%0%0%0%0%0
0%0%100%0%0%0%0%1
100%100%0%0%0%0%0%2
Compiler

Compiled 15 to 8 computations (46.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 0.0ms
ival-sub: 0.0ms (0% of total)
ival-div: 0.0ms (0% of total)
ival-exp: 0.0ms (0% of total)
ival-add: 0.0ms (0% of total)
const: 0.0ms (0% of total)
ival-neg: 0.0ms (0% of total)

sample4.0s (86.6%)

Results
902.0ms7924×0unsamplable
2.5s7525×1valid
86.0ms731×0valid
Precisions
Click to see histograms. Total time spent on operations: 2.6s
ival-exp: 1.6s (61.4% of total)
backward-pass: 262.0ms (10% of total)
ival-div: 231.0ms (8.8% of total)
ival-neg: 175.0ms (6.7% of total)
ival-add: 166.0ms (6.3% of total)
ival-sub: 155.0ms (5.9% of total)
const: 23.0ms (0.9% of total)
Bogosity

preprocess138.0ms (3%)

Algorithm
egg-herbie
Rules
689×fma-define
254×fma-neg
158×div-sub
128×times-frac
115×distribute-lft-in
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
018220
151220
2108220
3238220
4576220
51291220
62484220
72562220
82597220
92628220
102666220
112682220
122690220
Stop Event
saturated
Calls
Call 1
Inputs
(/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
(/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
(/.f64 (-.f64 (exp.f64 (neg.f64 x)) (exp.f64 (neg.f64 (neg.f64 x)))) (+.f64 (exp.f64 (neg.f64 x)) (exp.f64 (neg.f64 (neg.f64 x)))))
(neg.f64 (/.f64 (-.f64 (exp.f64 (neg.f64 x)) (exp.f64 (neg.f64 (neg.f64 x)))) (+.f64 (exp.f64 (neg.f64 x)) (exp.f64 (neg.f64 (neg.f64 x))))))
Outputs
(/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
(/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
(/.f64 (-.f64 (exp.f64 (neg.f64 x)) (exp.f64 (neg.f64 (neg.f64 x)))) (+.f64 (exp.f64 (neg.f64 x)) (exp.f64 (neg.f64 (neg.f64 x)))))
(/.f64 (-.f64 (exp.f64 (neg.f64 x)) (exp.f64 x)) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
(neg.f64 (/.f64 (-.f64 (exp.f64 (neg.f64 x)) (exp.f64 (neg.f64 (neg.f64 x)))) (+.f64 (exp.f64 (neg.f64 x)) (exp.f64 (neg.f64 (neg.f64 x))))))
(/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
Symmetry

(negabs x)

explain195.0ms (4.2%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
2450-0-(-.f64 (exp.f64 x) (exp.f64 (neg.f64 x)))
50-0-(/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
00-0-x
00-0-(exp.f64 (neg.f64 x))
00-0-(neg.f64 x)
00-0-(exp.f64 x)
00-0-(+.f64 (exp.f64 x) (exp.f64 (neg.f64 x)))
Results
93.0ms236×1024valid
29.0ms134×512valid
13.0ms112×256valid
12.0ms30×2048valid
Compiler

Compiled 84 to 23 computations (72.6% saved)

Precisions
Click to see histograms. Total time spent on operations: 90.0ms
ival-exp: 58.0ms (64.2% of total)
ival-div: 9.0ms (10% of total)
ival-neg: 8.0ms (8.9% of total)
ival-sub: 7.0ms (7.8% of total)
ival-add: 7.0ms (7.8% of total)
const: 1.0ms (1.1% of total)

eval0.0ms (0%)

Compiler

Compiled 1 to 1 computations (0% saved)

prune1.0ms (0%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
10.5%
(/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
Compiler

Compiled 14 to 7 computations (50% saved)

localize116.0ms (2.5%)

Localize:

Found 3 expressions with local error:

NewAccuracyProgram
100.0%
(+.f64 (exp.f64 x) (exp.f64 (neg.f64 x)))
98.1%
(/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
12.4%
(-.f64 (exp.f64 x) (exp.f64 (neg.f64 x)))
Results
61.0ms118×1024valid
29.0ms67×512valid
6.0ms56×256valid
6.0ms15×2048valid
Compiler

Compiled 35 to 8 computations (77.1% saved)

Precisions
Click to see histograms. Total time spent on operations: 56.0ms
ival-exp: 42.0ms (74.9% of total)
ival-div: 4.0ms (7.1% of total)
ival-sub: 3.0ms (5.3% of total)
ival-neg: 3.0ms (5.3% of total)
ival-add: 3.0ms (5.3% of total)
const: 0.0ms (0% of total)

series5.0ms (0.1%)

Counts
3 → 24
Calls
Call 1
Inputs
#<alt (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x)))>
#<alt (/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))>
#<alt (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x)))>
Outputs
#<alt (*.f64 #s(literal 2 binary64) x)>
#<alt (*.f64 x (+.f64 #s(literal 2 binary64) (*.f64 #s(literal 1/3 binary64) (pow.f64 x #s(literal 2 binary64)))))>
#<alt (*.f64 x (+.f64 #s(literal 2 binary64) (*.f64 (pow.f64 x #s(literal 2 binary64)) (+.f64 #s(literal 1/3 binary64) (*.f64 #s(literal 1/60 binary64) (pow.f64 x #s(literal 2 binary64)))))))>
#<alt (*.f64 x (+.f64 #s(literal 2 binary64) (*.f64 (pow.f64 x #s(literal 2 binary64)) (+.f64 #s(literal 1/3 binary64) (*.f64 (pow.f64 x #s(literal 2 binary64)) (+.f64 #s(literal 1/60 binary64) (*.f64 #s(literal 1/2520 binary64) (pow.f64 x #s(literal 2 binary64)))))))))>
#<alt (-.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x)))>
#<alt (-.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x)))>
#<alt (-.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x)))>
#<alt (-.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x)))>
#<alt x>
#<alt (*.f64 x (+.f64 #s(literal 1 binary64) (*.f64 #s(literal -1/3 binary64) (pow.f64 x #s(literal 2 binary64)))))>
#<alt (*.f64 x (+.f64 #s(literal 1 binary64) (*.f64 (pow.f64 x #s(literal 2 binary64)) (-.f64 (*.f64 #s(literal 2/15 binary64) (pow.f64 x #s(literal 2 binary64))) #s(literal 1/3 binary64)))))>
#<alt (*.f64 x (+.f64 #s(literal 1 binary64) (*.f64 (pow.f64 x #s(literal 2 binary64)) (-.f64 (*.f64 (pow.f64 x #s(literal 2 binary64)) (+.f64 #s(literal 2/15 binary64) (*.f64 #s(literal -17/315 binary64) (pow.f64 x #s(literal 2 binary64))))) #s(literal 1/3 binary64)))))>
#<alt (/.f64 (-.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x))) (+.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x))))>
#<alt (/.f64 (-.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x))) (+.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x))))>
#<alt (/.f64 (-.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x))) (+.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x))))>
#<alt (/.f64 (-.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x))) (+.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x))))>
#<alt #s(literal 2 binary64)>
#<alt (+.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 2 binary64)))>
#<alt (+.f64 #s(literal 2 binary64) (*.f64 (pow.f64 x #s(literal 2 binary64)) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 1/12 binary64) (pow.f64 x #s(literal 2 binary64))))))>
#<alt (+.f64 #s(literal 2 binary64) (*.f64 (pow.f64 x #s(literal 2 binary64)) (+.f64 #s(literal 1 binary64) (*.f64 (pow.f64 x #s(literal 2 binary64)) (+.f64 #s(literal 1/12 binary64) (*.f64 #s(literal 1/360 binary64) (pow.f64 x #s(literal 2 binary64))))))))>
#<alt (+.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x)))>
#<alt (+.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x)))>
#<alt (+.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x)))>
#<alt (+.f64 (exp.f64 x) (exp.f64 (*.f64 #s(literal -1 binary64) x)))>
Calls

9 calls:

TimeVariablePointExpression
1.0ms
x
@inf
(/ (- (exp x) (exp (neg x))) (+ (exp x) (exp (neg x))))
1.0ms
x
@-inf
(/ (- (exp x) (exp (neg x))) (+ (exp x) (exp (neg x))))
1.0ms
x
@0
(- (exp x) (exp (neg x)))
0.0ms
x
@0
(/ (- (exp x) (exp (neg x))) (+ (exp x) (exp (neg x))))
0.0ms
x
@-inf
(- (exp x) (exp (neg x)))

rewrite166.0ms (3.6%)

Algorithm
batch-egg-rewrite
Rules
80×add-exp-log
80×add-log-exp
80×add-cube-cbrt
78×log1p-expm1-u
78×expm1-log1p-u
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01242
117442
2340442
Stop Event
unsound
Calls
Call 1
Inputs
(-.f64 (exp.f64 x) (exp.f64 (neg.f64 x)))
(/.f64 (-.f64 (exp.f64 x) (exp.f64 (neg.f64 x))) (+.f64 (exp.f64 x) (exp.f64 (neg.f64 x))))
(+.f64 (exp.f64 x) (exp.f64 (neg.f64 x)))
Outputs

end0.0ms (0%)

Profiling

Loading profile data...