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

Error

Bits error versus x

Bits error versus y

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original0.5
Target0.0
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. Taylor expanded around inf 0.5

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

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

Reproduce

herbie shell --seed 2019016 
(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: 13.7s)Debug log

sample133.0ms

Algorithm
intervals
Results
359×(pre true 80)
262×(body real 80)
71×(body exit 10240)
12×(body real 640)
(body real 320)
(body real 160)
(body real 1280)

simplify8.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
8.0ms
(- (log (+ 1 (exp x))) (* x y))

prune6.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 0.4b

localize14.0ms

Local error

Found 3 expressions with local error:

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

rewrite7.0ms

Algorithm
rewrite-expression-head
Rules
log-prod
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
add-log-exp
add-exp-log
log-div
pow1
flip-+
associate--l+
add-cbrt-cube
flip3-+
associate--l-
flip--
log-pow
rem-log-exp
diff-log
flip3--
sub-neg
+-commutative
Counts
3 → 41
Calls
3 calls:
Slowest
4.0ms
(- (log (+ 1 (exp x))) (* x y))
1.0ms
(log (+ 1 (exp x)))
1.0ms
(+ 1 (exp x))

series128.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
75.0ms
(log (+ 1 (exp x)))
46.0ms
(- (log (+ 1 (exp x))) (* x y))
7.0ms
(+ 1 (exp x))

simplify202.0ms

Counts
21 → 50
Calls
21 calls:
Slowest
39.0ms
(+ (log 2) (+ (* 1/2 x) (* 1/8 (pow x 2))))
26.0ms
(+ (log 2) (+ (* 1/2 x) (* 1/8 (pow x 2))))
19.0ms
(+ x (+ (* 1/2 (pow x 2)) 2))
16.0ms
(log (+ (pow 1 3) (pow (exp x) 3)))
15.0ms
(log (+ (pow 1 3) (pow (exp x) 3)))

prune473.0ms

Pruning

5 alts after pruning (5 fresh and 0 done)

Merged error: 0.3b

localize17.0ms

Local error

Found 3 expressions with local error:

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

rewrite21.0ms

Algorithm
rewrite-expression-head
Rules
log-prod
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
add-log-exp
add-exp-log
log-div
pow1
flip-+
associate--l+
add-cbrt-cube
flip3-+
associate--l-
flip--
log-pow
rem-log-exp
diff-log
flip3--
sub-neg
+-commutative
Counts
3 → 41
Calls
3 calls:
Slowest
11.0ms
(- (log (+ (exp x) 1)) (* x y))
5.0ms
(+ (exp x) 1)
4.0ms
(log (+ (exp x) 1))

series134.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
70.0ms
(log (+ (exp x) 1))
57.0ms
(- (log (+ (exp x) 1)) (* x y))
7.0ms
(+ (exp x) 1)

simplify287.0ms

Counts
21 → 50
Calls
21 calls:
Slowest
54.0ms
(log (- (* (exp x) (exp x)) (* 1 1)))
41.0ms
(+ (log 2) (+ (* 1/2 x) (* 1/8 (pow x 2))))
37.0ms
(log (- (* (exp x) (exp x)) (* 1 1)))
27.0ms
(+ x (+ (* 1/2 (pow x 2)) 2))
27.0ms
(+ (log 2) (+ (* 1/2 x) (* 1/8 (pow x 2))))

prune452.0ms

Pruning

5 alts after pruning (4 fresh and 1 done)

Merged error: 0.3b

localize42.0ms

Local error

Found 4 expressions with local error:

5.0b
(log (+ (* 1 1) (- (* (exp x) (exp x)) (* 1 (exp x)))))
4.6b
(- (* (exp x) (exp x)) (* 1 (exp x)))
0.7b
(log (+ (pow (exp x) 3) 1))
0.0b
(pow (exp x) 3)

rewrite32.0ms

Algorithm
rewrite-expression-head
Rules
*-un-lft-identity
add-cube-cbrt
add-sqr-sqrt
log-prod
pow1
add-log-exp
add-exp-log
add-cbrt-cube
log-div
cube-prod
unpow-prod-down
flip-+
log-pow
rem-log-exp
flip3-+
rem-cube-cbrt
distribute-lft-out
flip--
pow-exp
unpow3
diff-log
distribute-rgt-out--
flip3--
pow-pow
sub-neg
pow-to-exp
cube-mult
Counts
4 → 61
Calls
4 calls:
Slowest
12.0ms
(log (+ (* 1 1) (- (* (exp x) (exp x)) (* 1 (exp x)))))
10.0ms
(- (* (exp x) (exp x)) (* 1 (exp x)))
7.0ms
(log (+ (pow (exp x) 3) 1))
2.0ms
(pow (exp x) 3)

series273.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
144.0ms
(log (+ (* 1 1) (- (* (exp x) (exp x)) (* 1 (exp x)))))
84.0ms
(log (+ (pow (exp x) 3) 1))
23.0ms
(pow (exp x) 3)
22.0ms
(- (* (exp x) (exp x)) (* 1 (exp x)))

simplify1.3s

Counts
37 → 73
Calls
37 calls:
Slowest
320.0ms
(log (- (* (* 1 1) (* 1 1)) (* (- (* (exp x) (exp x)) (* 1 (exp x))) (- (* (exp x) (exp x)) (* 1 (exp x))))))
176.0ms
(log (+ (pow (* 1 1) 3) (pow (- (* (exp x) (exp x)) (* 1 (exp x))) 3)))
96.0ms
(+ x (+ (* 7/6 (pow x 3)) (* 3/2 (pow x 2))))
92.0ms
(log (+ (pow (pow (exp x) 3) 3) (pow 1 3)))
82.0ms
(log (- (* (pow (exp x) 3) (pow (exp x) 3)) (* 1 1)))

prune959.0ms

Pruning

5 alts after pruning (4 fresh and 1 done)

Merged error: 0.3b

localize31.0ms

Local error

Found 4 expressions with local error:

4.8b
(log (sqrt (- (exp (+ x x)) (+ (exp x) -1))))
4.8b
(log (sqrt (+ (* 1 1) (- (* (exp x) (exp x)) (* 1 (exp x))))))
4.6b
(- (* (exp x) (exp x)) (* 1 (exp x)))
4.4b
(+ (exp x) -1)

rewrite30.0ms

Algorithm
rewrite-expression-head
Rules
16×log-prod
12×add-sqr-sqrt
11×*-un-lft-identity
10×sqrt-prod
add-cube-cbrt
add-log-exp
add-exp-log
pow1
log-pow
sqrt-div
add-cbrt-cube
log-div
difference-of-squares
flip--
flip-+
rem-log-exp
pow1/2
flip3--
flip3-+
distribute-lft-out--
distribute-lft-out
exp-sum
diff-log
distribute-rgt-out--
sub-neg
difference-of-sqr--1
+-commutative
Counts
4 → 64
Calls
4 calls:
Slowest
14.0ms
(log (sqrt (- (exp (+ x x)) (+ (exp x) -1))))
8.0ms
(log (sqrt (+ (* 1 1) (- (* (exp x) (exp x)) (* 1 (exp x))))))
5.0ms
(- (* (exp x) (exp x)) (* 1 (exp x)))
2.0ms
(+ (exp x) -1)

series300.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
150.0ms
(log (sqrt (+ (* 1 1) (- (* (exp x) (exp x)) (* 1 (exp x))))))
114.0ms
(log (sqrt (- (exp (+ x x)) (+ (exp x) -1))))
23.0ms
(- (* (exp x) (exp x)) (* 1 (exp x)))
13.0ms
(+ (exp x) -1)

simplify2.7s

Counts
38 → 76
Calls
38 calls:
Slowest
589.0ms
(log (sqrt (- (pow (exp (+ x x)) 3) (pow (+ (exp x) -1) 3))))
354.0ms
(log (sqrt (- (* (* 1 1) (* 1 1)) (* (- (* (exp x) (exp x)) (* 1 (exp x))) (- (* (exp x) (exp x)) (* 1 (exp x)))))))
234.0ms
(log (sqrt (+ (pow (* 1 1) 3) (pow (- (* (exp x) (exp x)) (* 1 (exp x))) 3))))
210.0ms
(log (sqrt (- (* (exp (+ x x)) (exp (+ x x))) (* (+ (exp x) -1) (+ (exp x) -1)))))
116.0ms
(+ x (+ (* 1/6 (pow x 3)) (* 1/2 (pow x 2))))

prune1.6s

Pruning

5 alts after pruning (3 fresh and 2 done)

Merged error: 0.3b

regimes142.0ms

Accuracy

0% (0.2b remaining)

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

bsearch2.0ms

end0.0ms

sample4.3s

Algorithm
intervals
Results
11544×(pre true 80)
8434×(body real 80)
2466×(body exit 10240)
256×(body real 640)
165×(body real 320)
122×(body real 1280)
101×(body real 160)