Average Error: 29.5 → 0.0
Time: 2.0m
Precision: 64
Internal Precision: 128
\[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.007185451780055169 \lor \neg \left(x \le 0.007491583784597752\right):\\ \;\;\;\;\frac{{\left(\frac{2}{e^{-2 \cdot x} + 1}\right)}^{3} - 1}{\log \left(e^{(\left(\frac{2}{e^{-2 \cdot x} + 1}\right) \cdot \left(1 + \frac{2}{e^{-2 \cdot x} + 1}\right) + 1)_*}\right)}\\ \mathbf{else}:\\ \;\;\;\;\left({x}^{5} \cdot \frac{2}{15} + x\right) - {x}^{3} \cdot \frac{1}{3}\\ \end{array}\]

Error

Bits error versus x

Bits error versus y

Derivation

  1. Split input into 2 regimes
  2. if x < -0.007185451780055169 or 0.007491583784597752 < x

    1. Initial program 0.0

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
    2. Using strategy rm
    3. Applied flip3--0.0

      \[\leadsto \color{blue}{\frac{{\left(\frac{2}{1 + e^{-2 \cdot x}}\right)}^{3} - {1}^{3}}{\frac{2}{1 + e^{-2 \cdot x}} \cdot \frac{2}{1 + e^{-2 \cdot x}} + \left(1 \cdot 1 + \frac{2}{1 + e^{-2 \cdot x}} \cdot 1\right)}}\]
    4. Using strategy rm
    5. Applied add-log-exp0.0

      \[\leadsto \frac{{\left(\frac{2}{1 + e^{-2 \cdot x}}\right)}^{3} - {1}^{3}}{\frac{2}{1 + e^{-2 \cdot x}} \cdot \frac{2}{1 + e^{-2 \cdot x}} + \left(1 \cdot 1 + \color{blue}{\log \left(e^{\frac{2}{1 + e^{-2 \cdot x}} \cdot 1}\right)}\right)}\]
    6. Applied add-log-exp0.0

      \[\leadsto \frac{{\left(\frac{2}{1 + e^{-2 \cdot x}}\right)}^{3} - {1}^{3}}{\frac{2}{1 + e^{-2 \cdot x}} \cdot \frac{2}{1 + e^{-2 \cdot x}} + \left(\color{blue}{\log \left(e^{1 \cdot 1}\right)} + \log \left(e^{\frac{2}{1 + e^{-2 \cdot x}} \cdot 1}\right)\right)}\]
    7. Applied sum-log0.0

      \[\leadsto \frac{{\left(\frac{2}{1 + e^{-2 \cdot x}}\right)}^{3} - {1}^{3}}{\frac{2}{1 + e^{-2 \cdot x}} \cdot \frac{2}{1 + e^{-2 \cdot x}} + \color{blue}{\log \left(e^{1 \cdot 1} \cdot e^{\frac{2}{1 + e^{-2 \cdot x}} \cdot 1}\right)}}\]
    8. Applied add-log-exp0.0

      \[\leadsto \frac{{\left(\frac{2}{1 + e^{-2 \cdot x}}\right)}^{3} - {1}^{3}}{\color{blue}{\log \left(e^{\frac{2}{1 + e^{-2 \cdot x}} \cdot \frac{2}{1 + e^{-2 \cdot x}}}\right)} + \log \left(e^{1 \cdot 1} \cdot e^{\frac{2}{1 + e^{-2 \cdot x}} \cdot 1}\right)}\]
    9. Applied sum-log0.0

      \[\leadsto \frac{{\left(\frac{2}{1 + e^{-2 \cdot x}}\right)}^{3} - {1}^{3}}{\color{blue}{\log \left(e^{\frac{2}{1 + e^{-2 \cdot x}} \cdot \frac{2}{1 + e^{-2 \cdot x}}} \cdot \left(e^{1 \cdot 1} \cdot e^{\frac{2}{1 + e^{-2 \cdot x}} \cdot 1}\right)\right)}}\]
    10. Simplified0.0

      \[\leadsto \frac{{\left(\frac{2}{1 + e^{-2 \cdot x}}\right)}^{3} - {1}^{3}}{\log \color{blue}{\left(e^{(\left(\frac{2}{1 + e^{-2 \cdot x}}\right) \cdot \left(\frac{2}{1 + e^{-2 \cdot x}} + 1\right) + 1)_*}\right)}}\]

    if -0.007185451780055169 < x < 0.007491583784597752

    1. Initial program 59.0

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
    2. Taylor expanded around 0 0.0

      \[\leadsto \color{blue}{\left(x + \frac{2}{15} \cdot {x}^{5}\right) - \frac{1}{3} \cdot {x}^{3}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.007185451780055169 \lor \neg \left(x \le 0.007491583784597752\right):\\ \;\;\;\;\frac{{\left(\frac{2}{e^{-2 \cdot x} + 1}\right)}^{3} - 1}{\log \left(e^{(\left(\frac{2}{e^{-2 \cdot x} + 1}\right) \cdot \left(1 + \frac{2}{e^{-2 \cdot x} + 1}\right) + 1)_*}\right)}\\ \mathbf{else}:\\ \;\;\;\;\left({x}^{5} \cdot \frac{2}{15} + x\right) - {x}^{3} \cdot \frac{1}{3}\\ \end{array}\]

Reproduce

herbie shell --seed 2019022 +o rules:numerics
(FPCore (x y)
  :name "Logistic function from Lakshay Garg"
  (- (/ 2 (+ 1 (exp (* -2 x)))) 1))

Details

Time bar (total: 2.0m)Debug log

sample77.0ms

Algorithm
intervals
Results
33.0ms60×body1280valid
15.0ms37×body640valid
12.0ms137×body80valid
5.0ms16×body320valid
1.0msbody160valid

simplify8.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
7.0ms
(- (/ 2 (+ 1 (exp (* -2 x)))) 1)

prune15.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 28.1b

localize14.0ms

Local error

Found 1 expressions with local error:

1.9b
(- (/ 2 (+ 1 (exp (* -2 x)))) 1)

rewrite5.0ms

Algorithm
rewrite-expression-head
Rules
fma-neg
add-sqr-sqrt
add-cube-cbrt
associate-/r/
add-exp-log
*-un-lft-identity
add-log-exp
flip--
div-inv
log1p-expm1-u
flip-+
difference-of-sqr-1
add-cbrt-cube
flip3--
flip3-+
sub-neg
expm1-def
pow1
expm1-log1p-u
Counts
1 → 21
Calls
1 calls:
Slowest
5.0ms
(- (/ 2 (+ 1 (exp (* -2 x)))) 1)

series44.0ms

Counts
1 → 3
Calls
1 calls:
Slowest
43.0ms
(- (/ 2 (+ 1 (exp (* -2 x)))) 1)

simplify248.0ms

Counts
9 → 24
Calls
9 calls:
Slowest
95.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))
49.0ms
(/ 2 (+ (pow 1 3) (pow (exp (* -2 x)) 3)))
28.0ms
(- (* 2 (/ 1 (+ (exp (* -2 x)) 1))) 1)
24.0ms
(/ 2 (- (* 1 1) (* (exp (* -2 x)) (exp (* -2 x)))))
20.0ms
(- (* 2 (/ 1 (+ (exp (* -2 x)) 1))) 1)

prune249.0ms

Pruning

3 alts after pruning (3 fresh and 0 done)

Merged error: 0b

localize28.0ms

Local error

Found 4 expressions with local error:

1.9b
(- (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow 1 3))
0.0b
(pow (/ 2 (+ 1 (exp (* -2 x)))) 3)
0.0b
(+ (* (/ 2 (+ 1 (exp (* -2 x)))) (/ 2 (+ 1 (exp (* -2 x))))) (+ (* 1 1) (* (/ 2 (+ 1 (exp (* -2 x)))) 1)))
0.0b
(* (/ 2 (+ 1 (exp (* -2 x)))) (/ 2 (+ 1 (exp (* -2 x)))))

rewrite29.0ms

Algorithm
rewrite-expression-head
Rules
85×prod-diff
49×add-sqr-sqrt
46×*-un-lft-identity
43×add-cube-cbrt
43×cube-prod
43×unpow-prod-down
32×associate-/r/
25×cube-mult
24×unpow3
20×flip-+
20×flip3-+
17×fma-neg
16×div-inv
11×add-log-exp
10×pow1
add-exp-log
add-cbrt-cube
frac-add
associate-*l*
associate-*r*
log1p-expm1-u
expm1-log1p-u
difference-of-squares
associate-*r/
associate-*l/
sum-log
frac-times
distribute-lft-out--
rem-cube-cbrt
flip--
cbrt-unprod
pow-prod-up
*-commutative
prod-exp
pow-exp
pow-prod-down
diff-log
flip3--
pow-plus
fma-def
pow-pow
sub-neg
associate-+r+
+-commutative
difference-cubes
pow-to-exp
pow2
cube-div
Counts
4 → 203
Calls
4 calls:
Slowest
12.0ms
(- (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow 1 3))
8.0ms
(+ (* (/ 2 (+ 1 (exp (* -2 x)))) (/ 2 (+ 1 (exp (* -2 x))))) (+ (* 1 1) (* (/ 2 (+ 1 (exp (* -2 x)))) 1)))
4.0ms
(* (/ 2 (+ 1 (exp (* -2 x)))) (/ 2 (+ 1 (exp (* -2 x)))))
1.0ms
(pow (/ 2 (+ 1 (exp (* -2 x)))) 3)

series220.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
78.0ms
(+ (* (/ 2 (+ 1 (exp (* -2 x)))) (/ 2 (+ 1 (exp (* -2 x))))) (+ (* 1 1) (* (/ 2 (+ 1 (exp (* -2 x)))) 1)))
70.0ms
(- (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow 1 3))
41.0ms
(pow (/ 2 (+ 1 (exp (* -2 x)))) 3)
31.0ms
(* (/ 2 (+ 1 (exp (* -2 x)))) (/ 2 (+ 1 (exp (* -2 x)))))

simplify40.2s

Counts
261 → 215
Calls
261 calls:
Slowest
972.0ms
(fma 1 (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (- (* (cbrt (pow 1 3)) (* (cbrt (pow 1 3)) (cbrt (pow 1 3))))))
939.0ms
(fma 1 (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (- (* 1 (* 1 1))))
906.0ms
(* (* (* (/ 2 (+ 1 (exp (* -2 x)))) (/ 2 (+ 1 (exp (* -2 x))))) (/ 2 (+ 1 (exp (* -2 x))))) (* (* (/ 2 (+ 1 (exp (* -2 x)))) (/ 2 (+ 1 (exp (* -2 x))))) (/ 2 (+ 1 (exp (* -2 x))))))
861.0ms
(* (+ 1 (exp (* -2 x))) (- (* 1 1) (* (/ 2 (+ 1 (exp (* -2 x)))) 1)))
779.0ms
(* (+ 1 (exp (* -2 x))) (- (* 1 1) (* (/ 2 (+ 1 (exp (* -2 x)))) 1)))

prune3.0s

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 0b

localize17.0ms

Local error

Found 4 expressions with local error:

1.9b
(- (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow 1 3))
0.0b
(pow (/ 2 (+ 1 (exp (* -2 x)))) 3)
0.0b
(/ (- (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow 1 3)) (log (exp (fma (/ 2 (+ 1 (exp (* -2 x)))) (+ (/ 2 (+ 1 (exp (* -2 x)))) 1) 1))))
0.0b
(+ (/ 2 (+ 1 (exp (* -2 x)))) 1)

rewrite81.0ms

Algorithm
rewrite-expression-head
Rules
124×add-sqr-sqrt
97×*-un-lft-identity
85×prod-diff
70×add-cube-cbrt
63×times-frac
51×cube-prod
51×unpow-prod-down
40×log-pow
33×cube-mult
30×associate-/r/
30×exp-prod
27×difference-of-squares
24×unpow3
18×distribute-lft-out--
17×fma-neg
16×div-inv
16×flip-+
16×flip3-+
15×pow1
associate-/l*
difference-cubes
add-exp-log
add-cbrt-cube
associate-/r*
add-log-exp
fma-def
log1p-expm1-u
expm1-log1p-u
associate-/l/
flip--
flip3--
rem-cube-cbrt
pow-exp
div-exp
div-sub
diff-log
frac-2neg
pow-pow
sub-neg
clear-num
+-commutative
cbrt-undiv
pow-to-exp
cube-div
Counts
4 → 264
Calls
4 calls:
Slowest
46.0ms
(/ (- (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow 1 3)) (log (exp (fma (/ 2 (+ 1 (exp (* -2 x)))) (+ (/ 2 (+ 1 (exp (* -2 x)))) 1) 1))))
23.0ms
(- (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow 1 3))
5.0ms
(+ (/ 2 (+ 1 (exp (* -2 x)))) 1)
2.0ms
(pow (/ 2 (+ 1 (exp (* -2 x)))) 3)

series261.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
144.0ms
(/ (- (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow 1 3)) (log (exp (fma (/ 2 (+ 1 (exp (* -2 x)))) (+ (/ 2 (+ 1 (exp (* -2 x)))) 1) 1))))
60.0ms
(- (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow 1 3))
33.0ms
(pow (/ 2 (+ 1 (exp (* -2 x)))) 3)
24.0ms
(+ (/ 2 (+ 1 (exp (* -2 x)))) 1)

simplify1.1m

Counts
373 → 276
Calls
373 calls:
Slowest
995.0ms
(fma (pow (/ 2 (+ (pow 1 3) (pow (exp (* -2 x)) 3))) 3) (pow (+ (* 1 1) (- (* (exp (* -2 x)) (exp (* -2 x))) (* 1 (exp (* -2 x))))) 3) (- (* (cbrt (pow 1 3)) (* (cbrt (pow 1 3)) (cbrt (pow 1 3))))))
993.0ms
(- (* (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (pow (/ 2 (+ 1 (exp (* -2 x)))) 3)) (* (pow 1 3) (pow 1 3)))
952.0ms
(fma 1 (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (- (* (cbrt (pow 1 3)) (* (cbrt (pow 1 3)) (cbrt (pow 1 3))))))
900.0ms
(pow (/ 2 (+ (pow 1 3) (pow (exp (* -2 x)) 3))) 3)
731.0ms
(fma 1 (pow (/ 2 (+ 1 (exp (* -2 x)))) 3) (- (* 1 (* 1 1))))

prune4.4s

Pruning

2 alts after pruning (1 fresh and 1 done)

Merged error: 0b

localize41.0ms

Local error

Found 4 expressions with local error:

19.1b
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))
0.2b
(* 2/15 (pow x 5))
0.1b
(* 1/3 (pow x 3))
0.0b
(+ x (* 2/15 (pow x 5)))

rewrite18.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
associate-*r*
*-un-lft-identity
add-sqr-sqrt
add-log-exp
log1p-expm1-u
add-exp-log
add-cbrt-cube
pow1
expm1-log1p-u
prod-diff
fma-neg
*-commutative
flip--
flip-+
associate--l+
unpow3
diff-log
flip3--
flip3-+
sub-neg
+-commutative
cube-mult
Counts
4 → 61
Calls
4 calls:
Slowest
10.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))
2.0ms
(* 1/3 (pow x 3))
2.0ms
(* 2/15 (pow x 5))
2.0ms
(+ x (* 2/15 (pow x 5)))

series113.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
47.0ms
(+ x (* 2/15 (pow x 5)))
31.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))
19.0ms
(* 2/15 (pow x 5))
15.0ms
(* 1/3 (pow x 3))

simplify989.0ms

Counts
28 → 73
Calls
28 calls:
Slowest
144.0ms
(/ (exp (+ x (* 2/15 (pow x 5)))) (exp (* 1/3 (pow x 3))))
140.0ms
(fma (sqrt (+ x (* 2/15 (pow x 5)))) (sqrt (+ x (* 2/15 (pow x 5)))) (- (* (pow x 3) 1/3)))
123.0ms
(fma 1 (+ x (* 2/15 (pow x 5))) (- (* (pow x 3) 1/3)))
121.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))
88.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))

prune649.0ms

Pruning

2 alts after pruning (0 fresh and 2 done)

Merged error: 0b

regimes280.0ms

Accuracy

100% (0.0b remaining)

Error of 0.0b against oracle of 0.0b and baseline of 29.5b

bsearch204.0ms

end0.0ms

sample2.9s

Algorithm
intervals
Results
1.5s1714×body1280valid
568.0ms1261×body640valid
376.0ms4078×body80valid
235.0ms639×body320valid
57.0ms308×body160valid