Average Error: 29.6 → 0.0
Time: 13.5s
Precision: 64
Internal Precision: 128
\[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.006955648676525426:\\ \;\;\;\;\sqrt[3]{(e^{\log 2 - \log_* (1 + e^{-2 \cdot x})} - 1)^* \cdot \left((e^{\log 2 - \log_* (1 + e^{-2 \cdot x})} - 1)^* \cdot (e^{\log 2 - \log_* (1 + e^{-2 \cdot x})} - 1)^*\right)}\\ \mathbf{elif}\;x \le 0.006295141041971404:\\ \;\;\;\;\left(x + \frac{2}{15} \cdot {x}^{5}\right) - {x}^{3} \cdot \frac{1}{3}\\ \mathbf{else}:\\ \;\;\;\;(e^{\frac{\log 2 \cdot \log 2 - \log_* (1 + e^{-2 \cdot x}) \cdot \log_* (1 + e^{-2 \cdot x})}{\log_* (1 + e^{-2 \cdot x}) + \log 2}} - 1)^*\\ \end{array}\]

Error

Bits error versus x

Bits error versus y

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if x < -0.006955648676525426

    1. Initial program 0.0

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
    2. Using strategy rm
    3. Applied add-exp-log0.0

      \[\leadsto \color{blue}{e^{\log \left(\frac{2}{1 + e^{-2 \cdot x}}\right)}} - 1\]
    4. Applied expm1-def0.0

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

      \[\leadsto (e^{\color{blue}{\log 2 - \log_* (1 + e^{-2 \cdot x})}} - 1)^*\]
    6. Using strategy rm
    7. Applied add-cbrt-cube0.0

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

    if -0.006955648676525426 < x < 0.006295141041971404

    1. Initial program 58.9

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
    2. Using strategy rm
    3. Applied add-exp-log58.9

      \[\leadsto \color{blue}{e^{\log \left(\frac{2}{1 + e^{-2 \cdot x}}\right)}} - 1\]
    4. Applied expm1-def58.9

      \[\leadsto \color{blue}{(e^{\log \left(\frac{2}{1 + e^{-2 \cdot x}}\right)} - 1)^*}\]
    5. Simplified58.8

      \[\leadsto (e^{\color{blue}{\log 2 - \log_* (1 + e^{-2 \cdot x})}} - 1)^*\]
    6. Using strategy rm
    7. Applied add-cbrt-cube58.8

      \[\leadsto \color{blue}{\sqrt[3]{\left((e^{\log 2 - \log_* (1 + e^{-2 \cdot x})} - 1)^* \cdot (e^{\log 2 - \log_* (1 + e^{-2 \cdot x})} - 1)^*\right) \cdot (e^{\log 2 - \log_* (1 + e^{-2 \cdot x})} - 1)^*}}\]
    8. Taylor expanded around 0 0.0

      \[\leadsto \color{blue}{\left(x + \frac{2}{15} \cdot {x}^{5}\right) - \frac{1}{3} \cdot {x}^{3}}\]

    if 0.006295141041971404 < x

    1. Initial program 0.0

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
    2. Using strategy rm
    3. Applied add-exp-log0.0

      \[\leadsto \color{blue}{e^{\log \left(\frac{2}{1 + e^{-2 \cdot x}}\right)}} - 1\]
    4. Applied expm1-def0.0

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

      \[\leadsto (e^{\color{blue}{\log 2 - \log_* (1 + e^{-2 \cdot x})}} - 1)^*\]
    6. Using strategy rm
    7. Applied flip--0.0

      \[\leadsto (e^{\color{blue}{\frac{\log 2 \cdot \log 2 - \log_* (1 + e^{-2 \cdot x}) \cdot \log_* (1 + e^{-2 \cdot x})}{\log 2 + \log_* (1 + e^{-2 \cdot x})}}} - 1)^*\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.006955648676525426:\\ \;\;\;\;\sqrt[3]{(e^{\log 2 - \log_* (1 + e^{-2 \cdot x})} - 1)^* \cdot \left((e^{\log 2 - \log_* (1 + e^{-2 \cdot x})} - 1)^* \cdot (e^{\log 2 - \log_* (1 + e^{-2 \cdot x})} - 1)^*\right)}\\ \mathbf{elif}\;x \le 0.006295141041971404:\\ \;\;\;\;\left(x + \frac{2}{15} \cdot {x}^{5}\right) - {x}^{3} \cdot \frac{1}{3}\\ \mathbf{else}:\\ \;\;\;\;(e^{\frac{\log 2 \cdot \log 2 - \log_* (1 + e^{-2 \cdot x}) \cdot \log_* (1 + e^{-2 \cdot x})}{\log_* (1 + e^{-2 \cdot x}) + \log 2}} - 1)^*\\ \end{array}\]

Reproduce

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

Details

Time bar (total: 12.9s)Debug log

sample98.0ms

Algorithm
intervals

simplify7.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

7.0ms
(- (/ 2 (+ 1 (exp (* -2 x)))) 1)

prune5.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 29.4b

localize16.0ms

Local error

Found 2 expressions with local error:

2.8b
(- (/ 2 (+ 1 (exp (* -2 x)))) 1)
0.0b
(+ 1 (exp (* -2 x)))

rewrite9.0ms

Algorithm
rewrite-expression-head
Counts
2 → 33
Calls

2 calls. Slowest were:

8.0ms
(- (/ 2 (+ 1 (exp (* -2 x)))) 1)
1.0ms
(+ 1 (exp (* -2 x)))

series68.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

55.0ms
(- (/ 2 (+ 1 (exp (* -2 x)))) 1)
13.0ms
(+ 1 (exp (* -2 x)))

simplify545.0ms

Counts
12 → 39
Calls

12 calls. Slowest were:

256.0ms
(- (+ (* 2 (pow x 2)) 2) (* 2 x))
100.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))
42.0ms
(- (* 2 (/ 1 (+ (exp (* -2 x)) 1))) 1)

prune404.0ms

Pruning

3 alts after pruning (3 fresh and 0 done)

Merged error: 0.0b

localize11.0ms

Local error

Found 2 expressions with local error:

2.7b
(- (log 2) (log1p (exp (* -2 x))))
0.0b
(expm1 (- (log 2) (log1p (exp (* -2 x)))))

rewrite5.0ms

Algorithm
rewrite-expression-head
Counts
2 → 40
Calls

2 calls. Slowest were:

4.0ms
(- (log 2) (log1p (exp (* -2 x))))
0.0ms
(expm1 (- (log 2) (log1p (exp (* -2 x)))))

series586.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

386.0ms
(expm1 (- (log 2) (log1p (exp (* -2 x)))))
200.0ms
(- (log 2) (log1p (exp (* -2 x))))

simplify887.0ms

Counts
32 → 46
Calls

32 calls. Slowest were:

103.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))
61.0ms
(- (+ x (* 1/12 (pow x 4))) (* 1/2 (pow x 2)))
46.0ms
(fma 1 (log 2) (- (* (log1p (exp (* -2 x))) 1)))

prune567.0ms

Pruning

3 alts after pruning (3 fresh and 0 done)

Merged error: 0.0b

localize18.0ms

Local error

Found 4 expressions with local error:

2.7b
(- (log 2) (log1p (exp (* -2 x))))
2.7b
(- (log 2) (log1p (exp (* -2 x))))
2.7b
(- (log 2) (log1p (exp (* -2 x))))
0.0b
(cbrt (* (* (expm1 (- (log 2) (log1p (exp (* -2 x))))) (expm1 (- (log 2) (log1p (exp (* -2 x)))))) (expm1 (- (log 2) (log1p (exp (* -2 x)))))))

rewrite34.0ms

Algorithm
rewrite-expression-head
Counts
4 → 99
Calls

4 calls. Slowest were:

10.0ms
(cbrt (* (* (expm1 (- (log 2) (log1p (exp (* -2 x))))) (expm1 (- (log 2) (log1p (exp (* -2 x)))))) (expm1 (- (log 2) (log1p (exp (* -2 x)))))))
8.0ms
(- (log 2) (log1p (exp (* -2 x))))
8.0ms
(- (log 2) (log1p (exp (* -2 x))))

series980.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

328.0ms
(cbrt (* (* (expm1 (- (log 2) (log1p (exp (* -2 x))))) (expm1 (- (log 2) (log1p (exp (* -2 x)))))) (expm1 (- (log 2) (log1p (exp (* -2 x)))))))
232.0ms
(- (log 2) (log1p (exp (* -2 x))))
228.0ms
(- (log 2) (log1p (exp (* -2 x))))
192.0ms
(- (log 2) (log1p (exp (* -2 x))))

simplify2.2s

Counts
89 → 111
Calls

89 calls. Slowest were:

100.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))
98.0ms
(- (+ x (* 1/12 (pow x 4))) (* 1/2 (pow x 2)))
69.0ms
(- (+ x (* 1/12 (pow x 4))) (* 1/2 (pow x 2)))

prune1.5s

Pruning

3 alts after pruning (2 fresh and 1 done)

Merged error: 0.0b

localize36.0ms

Local error

Found 4 expressions with local error:

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

rewrite18.0ms

Algorithm
rewrite-expression-head
Counts
4 → 61
Calls

4 calls. Slowest were:

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))

series145.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

51.0ms
(+ x (* 2/15 (pow x 5)))
43.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))
28.0ms
(* 2/15 (pow x 5))
24.0ms
(* 1/3 (pow x 3))

simplify956.0ms

Counts
28 → 73
Calls

28 calls. Slowest were:

141.0ms
(fma (sqrt (+ x (* 2/15 (pow x 5)))) (sqrt (+ x (* 2/15 (pow x 5)))) (- (* (pow x 3) 1/3)))
136.0ms
(fma 1 (+ x (* 2/15 (pow x 5))) (- (* (pow x 3) 1/3)))
125.0ms
(- (+ x (* 2/15 (pow x 5))) (* 1/3 (pow x 3)))

prune606.0ms

Pruning

3 alts after pruning (1 fresh and 2 done)

Merged error: 0.0b

regimes235.0ms

Accuracy

100% (0.0b remaining)

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

bsearch226.0ms

end0.0ms

sample2.7s

Algorithm
intervals