Average Error: 0.5 → 0.5
Time: 22.7s
Precision: 64
Internal Precision: 128
\[\log \left(1 + e^{x}\right) - x \cdot y\]
\[(\left(\sqrt{\log \left(\sqrt{1 + e^{x}}\right)}\right) \cdot \left(\sqrt{\log \left(\sqrt{1 + e^{x}}\right)}\right) + \left(\log \left(\sqrt{1 + e^{x}}\right) - x \cdot y\right))_*\]

Error

Bits error versus x

Bits error versus y

Target

Original0.5
Target0.1
Herbie0.5
\[\begin{array}{l} \mathbf{if}\;x \le 0:\\ \;\;\;\;\log \left(1 + e^{x}\right) - x \cdot y\\ \mathbf{else}:\\ \;\;\;\;\log \left(1 + e^{-x}\right) - \left(-x\right) \cdot \left(1 - y\right)\\ \end{array}\]

Derivation

  1. Initial program 0.5

    \[\log \left(1 + e^{x}\right) - x \cdot y\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt1.3

    \[\leadsto \log \color{blue}{\left(\sqrt{1 + e^{x}} \cdot \sqrt{1 + e^{x}}\right)} - x \cdot y\]
  4. Applied log-prod1.0

    \[\leadsto \color{blue}{\left(\log \left(\sqrt{1 + e^{x}}\right) + \log \left(\sqrt{1 + e^{x}}\right)\right)} - x \cdot y\]
  5. Applied associate--l+1.0

    \[\leadsto \color{blue}{\log \left(\sqrt{1 + e^{x}}\right) + \left(\log \left(\sqrt{1 + e^{x}}\right) - x \cdot y\right)}\]
  6. Using strategy rm
  7. Applied add-sqr-sqrt1.0

    \[\leadsto \color{blue}{\sqrt{\log \left(\sqrt{1 + e^{x}}\right)} \cdot \sqrt{\log \left(\sqrt{1 + e^{x}}\right)}} + \left(\log \left(\sqrt{1 + e^{x}}\right) - x \cdot y\right)\]
  8. Applied fma-def0.5

    \[\leadsto \color{blue}{(\left(\sqrt{\log \left(\sqrt{1 + e^{x}}\right)}\right) \cdot \left(\sqrt{\log \left(\sqrt{1 + e^{x}}\right)}\right) + \left(\log \left(\sqrt{1 + e^{x}}\right) - x \cdot y\right))_*}\]
  9. Final simplification0.5

    \[\leadsto (\left(\sqrt{\log \left(\sqrt{1 + e^{x}}\right)}\right) \cdot \left(\sqrt{\log \left(\sqrt{1 + e^{x}}\right)}\right) + \left(\log \left(\sqrt{1 + e^{x}}\right) - x \cdot y\right))_*\]

Reproduce

herbie shell --seed 2019004 +o rules:numerics
(FPCore (x y)
  :name "Logistic regression 2"

  :herbie-target
  (if (<= x 0) (- (log (+ 1 (exp x))) (* x y)) (- (log (+ 1 (exp (- x)))) (* (- x) (- 1 y))))

  (- (log (+ 1 (exp x))) (* x y)))

Details

Time bar (total: 22.1s)Debug log

sample121.0ms

Algorithm
intervals

simplify17.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

17.0ms
(- (log (+ 1 (exp x))) (* x y))

prune15.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 0.5b

localize28.0ms

Local error

Found 3 expressions with local error:

0.5b
(log (+ 1 (exp x)))
0.0b
(- (log (+ 1 (exp x))) (* x y))
0.0b
(+ 1 (exp x))

rewrite14.0ms

Algorithm
rewrite-expression-head
Counts
3 → 56
Calls

3 calls. Slowest were:

10.0ms
(- (log (+ 1 (exp x))) (* x y))
2.0ms
(log (+ 1 (exp x)))
1.0ms
(+ 1 (exp x))

series150.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

84.0ms
(log (+ 1 (exp x)))
55.0ms
(- (log (+ 1 (exp x))) (* x y))
11.0ms
(+ 1 (exp x))

simplify358.0ms

Counts
32 → 65
Calls

32 calls. Slowest were:

63.0ms
(+ (log 2) (+ (* 1/2 x) (* 1/8 (pow x 2))))
44.0ms
(+ (log 2) (+ (* 1/2 x) (* 1/8 (pow x 2))))
35.0ms
(+ x (+ (* 1/2 (pow x 2)) 2))

prune571.0ms

Pruning

4 alts after pruning (4 fresh and 0 done)

Merged error: 0.4b

localize14.0ms

Local error

Found 4 expressions with local error:

1.2b
(log (sqrt (+ 1 (exp x))))
1.2b
(log (sqrt (+ 1 (exp x))))
0.0b
(+ (log (sqrt (+ 1 (exp x)))) (- (log (sqrt (+ 1 (exp x)))) (* x y)))
0.0b
(- (log (sqrt (+ 1 (exp x)))) (* x y))

rewrite46.0ms

Algorithm
rewrite-expression-head
Counts
4 → 115
Calls

4 calls. Slowest were:

27.0ms
(+ (log (sqrt (+ 1 (exp x)))) (- (log (sqrt (+ 1 (exp x)))) (* x y)))
11.0ms
(- (log (sqrt (+ 1 (exp x)))) (* x y))
3.0ms
(log (sqrt (+ 1 (exp x))))

series402.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

119.0ms
(+ (log (sqrt (+ 1 (exp x)))) (- (log (sqrt (+ 1 (exp x)))) (* x y)))
105.0ms
(- (log (sqrt (+ 1 (exp x)))) (* x y))
102.0ms
(log (sqrt (+ 1 (exp x))))
76.0ms
(log (sqrt (+ 1 (exp x))))

simplify1.6s

Counts
79 → 127
Calls

79 calls. Slowest were:

252.0ms
(- (+ (* 1/4 (/ (pow x 2) (pow (sqrt 2) 2))) (+ (log (sqrt 2)) (* 1/2 (/ x (pow (sqrt 2) 2))))) (* 1/4 (/ (pow x 2) (pow (sqrt 2) 4))))
238.0ms
(- (+ (* 1/4 (/ (pow x 2) (pow (sqrt 2) 2))) (+ (log (sqrt 2)) (* 1/2 (/ x (pow (sqrt 2) 2))))) (* 1/4 (/ (pow x 2) (pow (sqrt 2) 4))))
229.0ms
(- (+ (* 1/4 (/ (pow x 2) (pow (sqrt 2) 2))) (+ (log (sqrt 2)) (* 1/2 (/ x (pow (sqrt 2) 2))))) (* 1/4 (/ (pow x 2) (pow (sqrt 2) 4))))

prune1.4s

Pruning

3 alts after pruning (3 fresh and 0 done)

Merged error: 0.4b

localize8.0ms

Local error

Found 4 expressions with local error:

1.2b
(log (sqrt (+ 1 (exp x))))
1.2b
(log (sqrt (+ 1 (exp x))))
1.2b
(log (sqrt (+ 1 (exp x))))
0.0b
(fma (sqrt (log (sqrt (+ 1 (exp x))))) (sqrt (log (sqrt (+ 1 (exp x))))) (- (log (sqrt (+ 1 (exp x)))) (* x y)))

rewrite5.0ms

Algorithm
rewrite-expression-head
Counts
4 → 70
Calls

4 calls. Slowest were:

2.0ms
(log (sqrt (+ 1 (exp x))))
1.0ms
(log (sqrt (+ 1 (exp x))))
1.0ms
(log (sqrt (+ 1 (exp x))))

series516.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

253.0ms
(fma (sqrt (log (sqrt (+ 1 (exp x))))) (sqrt (log (sqrt (+ 1 (exp x))))) (- (log (sqrt (+ 1 (exp x)))) (* x y)))
95.0ms
(log (sqrt (+ 1 (exp x))))
86.0ms
(log (sqrt (+ 1 (exp x))))
82.0ms
(log (sqrt (+ 1 (exp x))))

simplify1.0s

Counts
39 → 82
Calls

39 calls. Slowest were:

256.0ms
(- (+ (* 1/4 (/ (pow x 2) (pow (sqrt 2) 2))) (+ (log (sqrt 2)) (* 1/2 (/ x (pow (sqrt 2) 2))))) (* 1/4 (/ (pow x 2) (pow (sqrt 2) 4))))
244.0ms
(- (+ (* 1/4 (/ (pow x 2) (pow (sqrt 2) 2))) (+ (log (sqrt 2)) (* 1/2 (/ x (pow (sqrt 2) 2))))) (* 1/4 (/ (pow x 2) (pow (sqrt 2) 4))))
215.0ms
(- (+ (* 1/4 (/ (pow x 2) (pow (sqrt 2) 2))) (+ (log (sqrt 2)) (* 1/2 (/ x (pow (sqrt 2) 2))))) (* 1/4 (/ (pow x 2) (pow (sqrt 2) 4))))

prune1.1s

Pruning

3 alts after pruning (2 fresh and 1 done)

Merged error: 0.4b

localize27.0ms

Local error

Found 4 expressions with local error:

9.3b
(/ (- (* (log (+ 1 (exp x))) (log (+ 1 (exp x)))) (* (* x y) (* x y))) (+ (log (+ 1 (exp x))) (* x y)))
0.7b
(* (log (+ 1 (exp x))) (log (+ 1 (exp x))))
0.5b
(log (+ 1 (exp x)))
0.5b
(log (+ 1 (exp x)))

rewrite51.0ms

Algorithm
rewrite-expression-head
Counts
4 → 102
Calls

4 calls. Slowest were:

34.0ms
(/ (- (* (log (+ 1 (exp x))) (log (+ 1 (exp x)))) (* (* x y) (* x y))) (+ (log (+ 1 (exp x))) (* x y)))
11.0ms
(* (log (+ 1 (exp x))) (log (+ 1 (exp x))))
2.0ms
(log (+ 1 (exp x)))

series319.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

109.0ms
(/ (- (* (log (+ 1 (exp x))) (log (+ 1 (exp x)))) (* (* x y) (* x y))) (+ (log (+ 1 (exp x))) (* x y)))
76.0ms
(log (+ 1 (exp x)))
75.0ms
(* (log (+ 1 (exp x))) (log (+ 1 (exp x))))
58.0ms
(log (+ 1 (exp x)))

simplify8.1s

Counts
81 → 114
Calls

81 calls. Slowest were:

447.0ms
(/ (cbrt (- (* (log (+ 1 (exp x))) (log (+ 1 (exp x)))) (* (* x y) (* x y)))) (sqrt (+ (log (+ 1 (exp x))) (* x y))))
441.0ms
(- (log (- (* (log (+ 1 (exp x))) (log (+ 1 (exp x)))) (* (* x y) (* x y)))) (log (+ (log (+ 1 (exp x))) (* x y))))
440.0ms
(/ (sqrt (- (* (log (+ 1 (exp x))) (log (+ 1 (exp x)))) (* (* x y) (* x y)))) (cbrt (+ (log (+ 1 (exp x))) (* x y))))

prune1.3s

Pruning

3 alts after pruning (1 fresh and 2 done)

Merged error: 0.4b

regimes93.0ms

Accuracy

0% (0.2b remaining)

Error of 0.5b against oracle of 0.3b and baseline of 0.5b

bsearch3.0ms

end0.0ms

sample4.8s

Algorithm
intervals