Average Error: 0.2 → 0.3
Time: 42.5s
Precision: 64
Internal Precision: 128
\[\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t\]
\[\left(\log \left(\sqrt[3]{x + y}\right) + \left((\left(a - 0.5\right) \cdot \left(\log t\right) + \left(\log z\right))_* - t\right)\right) + \log \left(\sqrt[3]{x + y} \cdot \sqrt[3]{x + y}\right)\]

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Derivation

  1. Initial program 0.2

    \[\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\log \left(y + x\right) + \left((\left(a - 0.5\right) \cdot \left(\log t\right) + \left(\log z\right))_* - t\right)}\]
  3. Using strategy rm
  4. Applied add-cube-cbrt0.2

    \[\leadsto \log \color{blue}{\left(\left(\sqrt[3]{y + x} \cdot \sqrt[3]{y + x}\right) \cdot \sqrt[3]{y + x}\right)} + \left((\left(a - 0.5\right) \cdot \left(\log t\right) + \left(\log z\right))_* - t\right)\]
  5. Applied log-prod0.3

    \[\leadsto \color{blue}{\left(\log \left(\sqrt[3]{y + x} \cdot \sqrt[3]{y + x}\right) + \log \left(\sqrt[3]{y + x}\right)\right)} + \left((\left(a - 0.5\right) \cdot \left(\log t\right) + \left(\log z\right))_* - t\right)\]
  6. Applied associate-+l+0.3

    \[\leadsto \color{blue}{\log \left(\sqrt[3]{y + x} \cdot \sqrt[3]{y + x}\right) + \left(\log \left(\sqrt[3]{y + x}\right) + \left((\left(a - 0.5\right) \cdot \left(\log t\right) + \left(\log z\right))_* - t\right)\right)}\]
  7. Final simplification0.3

    \[\leadsto \left(\log \left(\sqrt[3]{x + y}\right) + \left((\left(a - 0.5\right) \cdot \left(\log t\right) + \left(\log z\right))_* - t\right)\right) + \log \left(\sqrt[3]{x + y} \cdot \sqrt[3]{x + y}\right)\]

Reproduce

herbie shell --seed 2019007 +o rules:numerics
(FPCore (x y z t a)
  :name "Numeric.SpecFunctions:logGammaL from math-functions-0.1.5.2"
  (+ (- (+ (log (+ x y)) (log z)) t) (* (- a 0.5) (log t))))

Details

Time bar (total: 39.5s)Debug log

sample421.0ms

Algorithm
intervals

simplify419.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

419.0ms
(+ (- (+ (log (+ x y)) (log z)) t) (* (- a 0.5) (log t)))

prune17.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 0.2b

localize30.0ms

Local error

Found 3 expressions with local error:

0.3b
(fma (- a 0.5) (log t) (log z))
0.1b
(+ (log (+ y x)) (- (fma (- a 0.5) (log t) (log z)) t))
0.0b
(- (fma (- a 0.5) (log t) (log z)) t)

rewrite15.0ms

Algorithm
rewrite-expression-head
Counts
3 → 55
Calls

3 calls. Slowest were:

9.0ms
(+ (log (+ y x)) (- (fma (- a 0.5) (log t) (log z)) t))
5.0ms
(- (fma (- a 0.5) (log t) (log z)) t)
0.0ms
(fma (- a 0.5) (log t) (log z))

series244.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

117.0ms
(+ (log (+ y x)) (- (fma (- a 0.5) (log t) (log z)) t))
86.0ms
(fma (- a 0.5) (log t) (log z))
40.0ms
(- (fma (- a 0.5) (log t) (log z)) t)

simplify3.1s

Counts
25 → 64
Calls

25 calls. Slowest were:

469.0ms
(- (+ (* a (log t)) (+ (log z) (log x))) (+ t (* 0.5 (log t))))
435.0ms
(- (* 0.5 (log (/ 1 t))) (+ t (+ (log (/ 1 z)) (* a (log (/ 1 t))))))
428.0ms
(- (* 0.5 (log (/ 1 t))) (+ (log (/ 1 z)) (* a (log (/ 1 t)))))

prune1.0s

Pruning

9 alts after pruning (9 fresh and 0 done)

Merged error: 0.1b

localize9.0ms

Local error

Found 3 expressions with local error:

0.3b
(fma (log t) (- a 0.5) (log z))
0.1b
(+ (log (+ y x)) (- (fma (log t) (- a 0.5) (log z)) t))
0.0b
(- (fma (log t) (- a 0.5) (log z)) t)

rewrite13.0ms

Algorithm
rewrite-expression-head
Counts
3 → 55
Calls

3 calls. Slowest were:

9.0ms
(+ (log (+ y x)) (- (fma (log t) (- a 0.5) (log z)) t))
3.0ms
(- (fma (log t) (- a 0.5) (log z)) t)
0.0ms
(fma (log t) (- a 0.5) (log z))

series396.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

169.0ms
(fma (log t) (- a 0.5) (log z))
162.0ms
(+ (log (+ y x)) (- (fma (log t) (- a 0.5) (log z)) t))
64.0ms
(- (fma (log t) (- a 0.5) (log z)) t)

simplify3.6s

Counts
25 → 64
Calls

25 calls. Slowest were:

518.0ms
(- (* 0.5 (log (/ 1 t))) (+ t (+ (log (/ 1 z)) (* a (log (/ 1 t))))))
490.0ms
(- (+ (* 0.5 (log (/ -1 t))) (+ (* a (log -1)) (* 0.5 (log -1)))) (+ t (+ (* a (log (/ -1 t))) (log (/ -1 z)))))
442.0ms
(- (* 0.5 (log (/ 1 t))) (+ (log (/ 1 z)) (* a (log (/ 1 t)))))

prune1.0s

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 0.1b

localize24.0ms

Local error

Found 4 expressions with local error:

0.5b
(cbrt (+ y x))
0.5b
(cbrt (+ y x))
0.5b
(cbrt (+ y x))
0.5b
(* (cbrt (+ y x)) (cbrt (+ y x)))

rewrite10.0ms

Algorithm
rewrite-expression-head
Counts
4 → 83
Calls

4 calls. Slowest were:

8.0ms
(* (cbrt (+ y x)) (cbrt (+ y x)))
1.0ms
(cbrt (+ y x))
1.0ms
(cbrt (+ y x))

series669.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

181.0ms
(cbrt (+ y x))
179.0ms
(* (cbrt (+ y x)) (cbrt (+ y x)))
165.0ms
(cbrt (+ y x))
143.0ms
(cbrt (+ y x))

simplify2.2s

Counts
59 → 95
Calls

59 calls. Slowest were:

248.0ms
(- (+ (pow x 1/3) (* 1/3 (* (pow (/ 1 (pow x 2)) 1/3) y))) (* 1/9 (* (pow (/ 1 (pow x 5)) 1/3) (pow y 2))))
239.0ms
(- (+ (pow x 1/3) (* 1/3 (* (pow (/ 1 (pow x 2)) 1/3) y))) (* 1/9 (* (pow (/ 1 (pow x 5)) 1/3) (pow y 2))))
233.0ms
(- (+ (pow x 1/3) (* 1/3 (* (pow (/ 1 (pow x 2)) 1/3) y))) (* 1/9 (* (pow (/ 1 (pow x 5)) 1/3) (pow y 2))))

prune1.9s

Pruning

9 alts after pruning (7 fresh and 2 done)

Merged error: 0.1b

localize30.0ms

Local error

Found 4 expressions with local error:

0.6b
(cbrt (fma (log t) (- a 0.5) (log z)))
0.6b
(cbrt (fma (log t) (- a 0.5) (log z)))
0.6b
(cbrt (fma (log t) (- a 0.5) (log z)))
0.5b
(* (cbrt (fma (log t) (- a 0.5) (log z))) (cbrt (fma (log t) (- a 0.5) (log z))))

rewrite15.0ms

Algorithm
rewrite-expression-head
Counts
4 → 69
Calls

4 calls. Slowest were:

10.0ms
(* (cbrt (fma (log t) (- a 0.5) (log z))) (cbrt (fma (log t) (- a 0.5) (log z))))
1.0ms
(cbrt (fma (log t) (- a 0.5) (log z)))
1.0ms
(cbrt (fma (log t) (- a 0.5) (log z)))

series1.4s

Counts
4 → 12
Calls

4 calls. Slowest were:

622.0ms
(* (cbrt (fma (log t) (- a 0.5) (log z))) (cbrt (fma (log t) (- a 0.5) (log z))))
293.0ms
(cbrt (fma (log t) (- a 0.5) (log z)))
283.0ms
(cbrt (fma (log t) (- a 0.5) (log z)))
226.0ms
(cbrt (fma (log t) (- a 0.5) (log z)))

simplify5.3s

Counts
41 → 81
Calls

41 calls. Slowest were:

812.0ms
(- (+ (* 0.2222222222222222 (* (* (pow a 2) (* (pow (log t) 3) (log z))) (pow (/ 1 (pow (- (log z) (* 0.5 (log t))) 10)) 1/3))) (+ (* 0.2222222222222222 (* (* (pow a 2) (* (log z) (pow (log t) 3))) (pow (/ 1 (pow (- (log z) (* 0.5 (log t))) 10)) 1/3))) (+ (* 1/3 (* (* (pow a 2) (pow (log t) 2)) (pow (/ 1 (pow (- (log z) (* 0.5 (log t))) 4)) 1/3))) (+ (pow (pow (- (log z) (* 0.5 (log t))) 2) 1/3) (* 2/3 (* (* a (* (log z) (log t))) (pow (/ 1 (pow (- (log z) (* 0.5 (log t))) 4)) 1/3))))))) (+ (* 0.1111111111111111 (* (* (pow a 2) (pow (log t) 4)) (pow (/ 1 (pow (- (log z) (* 0.5 (log t))) 10)) 1/3))) (+ (* 0.3333333333333333 (* (* a (pow (log t) 2)) (pow (/ 1 (pow (- (log z) (* 0.5 (log t))) 4)) 1/3))) (* 4/9 (* (* (pow a 2) (* (pow (log z) 2) (pow (log t) 2))) (pow (/ 1 (pow (- (log z) (* 0.5 (log t))) 10)) 1/3))))))
362.0ms
(- (+ (* 0.2222222222222221 (/ (* (pow (log (/ -1 t)) 2) (* (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))) (pow (log -1) 2))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (+ (* 0.4444444444444444 (/ (* (log (/ -1 z)) (* (pow (log -1) 3) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (+ (* 8/9 (/ (* (log (/ -1 t)) (* (pow (log (/ -1 z)) 2) (* (log -1) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a))))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (+ (* 0.3333333333333333 (/ (* (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))) (pow (log -1) 2)) (* a (pow (- (log (/ -1 t)) (log -1)) 2)))) (+ (* 2/3 (/ (* (log (/ -1 t)) (* (log (/ -1 z)) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))))) (* a (pow (- (log (/ -1 t)) (log -1)) 2)))) (+ (* 0.08333333333333333 (/ (* (pow (log (/ -1 t)) 2) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 2)))) (+ (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))) (+ (* 0.08333333333333331 (/ (* (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))) (pow (log -1) 2)) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 2)))) (+ (* 1/3 (/ (* (pow (log (/ -1 z)) 2) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 2)))) (+ (* 0.16666666666666666 (/ (* (log (/ -1 t)) (* (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))) (log -1))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 2)))) (* 0.4444444444444444 (/ (* (pow (log (/ -1 t)) 3) (* (log (/ -1 z)) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))))))))))))) (+ (* 0.11111111111111116 (/ (* (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))) (pow (log -1) 4)) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (+ (* 2.220446049250313e-16 (/ (* (log (/ -1 t)) (* (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))) (pow (log -1) 3))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (+ (* 0.3333333333333333 (/ (* (log (/ -1 t)) (* (log (/ -1 z)) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 2)))) (+ (* 0.3333333333333333 (/ (* (pow (log (/ -1 t)) 2) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a))))))) (* a (pow (- (log (/ -1 t)) (log -1)) 2)))) (+ (* 2/3 (/ (* (log (/ -1 z)) (* (log -1) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))))) (* a (pow (- (log (/ -1 t)) (log -1)) 2)))) (+ (* 4/9 (/ (* (pow (log (/ -1 z)) 2) (* (pow (log -1) 2) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (+ (* 0.1111111111111111 (/ (* (pow (log (/ -1 t)) 4) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (+ (* 0.4444444444444442 (/ (* (log (/ -1 t)) (* (log (/ -1 z)) (* (pow (log -1) 2) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a))))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (+ (* 4/9 (/ (* (pow (log (/ -1 t)) 2) (* (pow (log (/ -1 z)) 2) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (+ (* 0.4444444444444444 (/ (* (pow (log (/ -1 t)) 2) (* (log (/ -1 z)) (* (log -1) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a))))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 4)))) (* 0.3333333333333333 (/ (* (log (/ -1 z)) (* (log -1) (exp (* 1/3 (- (log (pow (- (log (/ -1 t)) (log -1)) 2)) (* 2 (log (/ -1 a)))))))) (* (pow a 2) (pow (- (log (/ -1 t)) (log -1)) 2)))))))))))))))
352.0ms
(* (fma (log t) (- a 0.5) (log z)) (fma (log t) (- a 0.5) (log z)))

prune1.8s

Pruning

14 alts after pruning (13 fresh and 1 done)

Merged error: 0.0b

regimes1.0s

Accuracy

0% (0.2b remaining)

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

bsearch2.0ms

end0.0ms

sample14.8s

Algorithm
intervals