Average Error: 0.2 → 0.2
Time: 22.0s
Precision: 64
Internal Precision: 128
\[\left(-x \cdot \frac{1}{\tan B}\right) + \frac{1}{\sin B}\]
\[(\left(\cos B\right) \cdot \left(\frac{-x}{\sin B}\right) + \left(\frac{1}{\sin B}\right))_*\]

Error

Bits error versus B

Bits error versus x

Derivation

  1. Initial program 0.2

    \[\left(-x \cdot \frac{1}{\tan B}\right) + \frac{1}{\sin B}\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\frac{1}{\sin B} - \frac{x}{\tan B}}\]
  3. Using strategy rm
  4. Applied tan-quot0.2

    \[\leadsto \frac{1}{\sin B} - \frac{x}{\color{blue}{\frac{\sin B}{\cos B}}}\]
  5. Applied associate-/r/0.2

    \[\leadsto \frac{1}{\sin B} - \color{blue}{\frac{x}{\sin B} \cdot \cos B}\]
  6. Applied add-cube-cbrt0.8

    \[\leadsto \color{blue}{\left(\sqrt[3]{\frac{1}{\sin B}} \cdot \sqrt[3]{\frac{1}{\sin B}}\right) \cdot \sqrt[3]{\frac{1}{\sin B}}} - \frac{x}{\sin B} \cdot \cos B\]
  7. Applied prod-diff0.8

    \[\leadsto \color{blue}{(\left(\sqrt[3]{\frac{1}{\sin B}} \cdot \sqrt[3]{\frac{1}{\sin B}}\right) \cdot \left(\sqrt[3]{\frac{1}{\sin B}}\right) + \left(-\cos B \cdot \frac{x}{\sin B}\right))_* + (\left(-\cos B\right) \cdot \left(\frac{x}{\sin B}\right) + \left(\cos B \cdot \frac{x}{\sin B}\right))_*}\]
  8. Simplified0.2

    \[\leadsto \color{blue}{(\left(\cos B\right) \cdot \left(\frac{-x}{\sin B}\right) + \left(\frac{1}{\sin B}\right))_*} + (\left(-\cos B\right) \cdot \left(\frac{x}{\sin B}\right) + \left(\cos B \cdot \frac{x}{\sin B}\right))_*\]
  9. Simplified0.2

    \[\leadsto (\left(\cos B\right) \cdot \left(\frac{-x}{\sin B}\right) + \left(\frac{1}{\sin B}\right))_* + \color{blue}{0}\]
  10. Final simplification0.2

    \[\leadsto (\left(\cos B\right) \cdot \left(\frac{-x}{\sin B}\right) + \left(\frac{1}{\sin B}\right))_*\]

Reproduce

herbie shell --seed 2019022 +o rules:numerics
(FPCore (B x)
  :name "VandenBroeck and Keller, Equation (24)"
  (+ (- (* x (/ 1 (tan B)))) (/ 1 (sin B))))

Details

Time bar (total: 21.0s)Debug log

sample450.0ms

Algorithm
intervals
Results
194.0ms63×body1280valid
103.0ms155×body80valid
53.0ms41×body640valid
25.0ms24×body320valid
8.0ms14×body160valid

simplify148.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
147.0ms
(+ (- (* x (/ 1 (tan B)))) (/ 1 (sin B)))

prune23.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 0.2b

localize45.0ms

Local error

Found 3 expressions with local error:

0.2b
(/ x (tan B))
0.2b
(/ 1 (sin B))
0.0b
(- (/ 1 (sin B)) (/ x (tan B)))

rewrite18.0ms

Algorithm
rewrite-expression-head
Rules
20×prod-diff
18×*-un-lft-identity
17×add-sqr-sqrt
15×add-cube-cbrt
13×div-inv
associate-/r*
add-log-exp
associate-/r/
tan-quot
add-exp-log
fma-neg
pow1
log1p-expm1-u
add-cbrt-cube
expm1-log1p-u
distribute-lft-out--
frac-2neg
clear-num
difference-of-squares
inv-pow
flip--
pow-flip
frac-sub
diff-log
flip3--
sub-neg
rec-exp
Counts
3 → 76
Calls
3 calls:
Slowest
10.0ms
(- (/ 1 (sin B)) (/ x (tan B)))
3.0ms
(/ x (tan B))
1.0ms
(/ 1 (sin B))

series774.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
617.0ms
(/ x (tan B))
133.0ms
(- (/ 1 (sin B)) (/ x (tan B)))
24.0ms
(/ 1 (sin B))

simplify1.7s

Counts
66 → 85
Calls
66 calls:
Slowest
93.0ms
(fma (* (cbrt (/ 1 (sin B))) (cbrt (/ 1 (sin B)))) (cbrt (/ 1 (sin B))) (- (* (/ 1 (tan B)) x)))
84.0ms
(fma 1 (/ 1 (sin B)) (- (* (/ 1 (tan B)) x)))
81.0ms
(fma (sqrt (/ 1 (sin B))) (sqrt (/ 1 (sin B))) (- (* (/ 1 (tan B)) x)))
69.0ms
(fma 1 (/ 1 (sin B)) (- (* (/ 1 (tan B)) x)))
60.0ms
(fma (* (cbrt (/ 1 (sin B))) (cbrt (/ 1 (sin B)))) (cbrt (/ 1 (sin B))) (- (* (cos B) (/ x (sin B)))))

prune836.0ms

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 0.0b

localize28.0ms

Local error

Found 3 expressions with local error:

0.2b
(/ 1 (sin B))
0.1b
(/ (- x) (sin B))
0.1b
(fma (cos B) (/ (- x) (sin B)) (/ 1 (sin B)))

rewrite10.0ms

Algorithm
rewrite-expression-head
Rules
13×add-cube-cbrt
13×*-un-lft-identity
13×add-sqr-sqrt
12×times-frac
add-exp-log
associate-/r*
add-cbrt-cube
associate-/l*
neg-mul-1
pow1
add-log-exp
log1p-expm1-u
expm1-log1p-u
div-inv
frac-2neg
clear-num
inv-pow
pow-flip
fma-udef
distribute-frac-neg
div-exp
div-sub
rec-exp
cbrt-undiv
neg-sub0
Counts
3 → 63
Calls
3 calls:
Slowest
6.0ms
(/ (- x) (sin B))
2.0ms
(/ 1 (sin B))
0.0ms
(fma (cos B) (/ (- x) (sin B)) (/ 1 (sin B)))

series196.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
108.0ms
(fma (cos B) (/ (- x) (sin B)) (/ 1 (sin B)))
74.0ms
(/ (- x) (sin B))
14.0ms
(/ 1 (sin B))

simplify503.0ms

Counts
46 → 72
Calls
46 calls:
Slowest
159.0ms
(/ (* (* (- x) (- x)) (- x)) (* (* (sin B) (sin B)) (sin B)))
52.0ms
(+ (* 1/6 B) (+ (/ 1 B) (* 7/360 (pow B 3))))
49.0ms
(- (/ 1 (sin B)) (/ (* x (cos B)) (sin B)))
49.0ms
(- (+ (* 1/6 B) (/ 1 B)) (/ x B))
28.0ms
(/ (* (cbrt (- x)) (cbrt (- x))) (* (cbrt (sin B)) (cbrt (sin B))))

prune711.0ms

Pruning

10 alts after pruning (9 fresh and 1 done)

Merged error: 0.0b

localize8.0ms

Local error

Found 4 expressions with local error:

0.3b
(* x (/ 1 (tan B)))
0.2b
(/ 1 (sin B))
0.2b
(/ 1 (tan B))
0.0b
(- (/ 1 (sin B)) (* x (/ 1 (tan B))))

rewrite9.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
add-log-exp
add-exp-log
associate-/r*
pow1
div-inv
associate-*r*
log1p-expm1-u
prod-diff
fma-neg
add-cbrt-cube
expm1-log1p-u
inv-pow
pow-flip
frac-sub
un-div-inv
associate-/r/
associate-*r/
tan-quot
frac-2neg
clear-num
rec-exp
flip--
*-commutative
diff-log
flip3--
sub-neg
Counts
4 → 78
Calls
4 calls:
Slowest
5.0ms
(- (/ 1 (sin B)) (* x (/ 1 (tan B))))
1.0ms
(* x (/ 1 (tan B)))
1.0ms
(/ 1 (tan B))
1.0ms
(/ 1 (sin B))

series305.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
134.0ms
(* x (/ 1 (tan B)))
124.0ms
(- (/ 1 (sin B)) (* x (/ 1 (tan B))))
34.0ms
(/ 1 (tan B))
13.0ms
(/ 1 (sin B))

simplify907.0ms

Counts
43 → 90
Calls
43 calls:
Slowest
199.0ms
(- (/ 1 B) (+ (* 1/3 B) (* 1/45 (pow B 3))))
76.0ms
(fma (sqrt (/ 1 (sin B))) (sqrt (/ 1 (sin B))) (- (* (/ 1 (tan B)) x)))
67.0ms
(fma 1 (/ 1 (sin B)) (- (* (/ 1 (tan B)) x)))
61.0ms
(fma 1 (/ 1 (sin B)) (- (* (/ 1 (tan B)) x)))
59.0ms
(fma (* (cbrt (/ 1 (sin B))) (cbrt (/ 1 (sin B)))) (cbrt (/ 1 (sin B))) (- (* (/ 1 (tan B)) x)))

prune904.0ms

Pruning

10 alts after pruning (8 fresh and 2 done)

Merged error: 0.0b

localize14.0ms

Local error

Found 4 expressions with local error:

0.3b
(/ 1 (/ (tan B) x))
0.2b
(/ 1 (sin B))
0.1b
(/ (tan B) x)
0.0b
(- (/ 1 (sin B)) (/ 1 (/ (tan B) x)))

rewrite10.0ms

Algorithm
rewrite-expression-head
Rules
21×*-un-lft-identity
20×prod-diff
19×add-sqr-sqrt
18×div-inv
17×add-cube-cbrt
associate-/r*
add-log-exp
add-exp-log
pow1
associate-/r/
distribute-lft-out--
log1p-expm1-u
fma-neg
add-cbrt-cube
expm1-log1p-u
associate-/l*
frac-2neg
clear-num
inv-pow
pow-flip
rec-exp
associate-/l/
difference-of-squares
flip--
frac-sub
tan-quot
diff-log
flip3--
sub-neg
Counts
4 → 98
Calls
4 calls:
Slowest
5.0ms
(- (/ 1 (sin B)) (/ 1 (/ (tan B) x)))
2.0ms
(/ (tan B) x)
1.0ms
(/ 1 (/ (tan B) x))
1.0ms
(/ 1 (sin B))

series269.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
104.0ms
(- (/ 1 (sin B)) (/ 1 (/ (tan B) x)))
80.0ms
(/ 1 (/ (tan B) x))
61.0ms
(/ (tan B) x)
23.0ms
(/ 1 (sin B))

simplify3.1s

Counts
75 → 110
Calls
75 calls:
Slowest
127.0ms
(+ (/ B x) (+ (* 1/3 (/ (pow B 3) x)) (* 2/15 (/ (pow B 5) x))))
106.0ms
(fma 1 (/ 1 (sin B)) (- (* x (/ 1 (tan B)))))
97.0ms
(fma (- (/ 1 (/ (tan B) x))) 1 (* (/ 1 (/ (tan B) x)) 1))
88.0ms
(fma (- (/ 1 (/ (tan B) x))) 1 (* (/ 1 (/ (tan B) x)) 1))
85.0ms
(fma (* (cbrt (/ 1 (sin B))) (cbrt (/ 1 (sin B)))) (cbrt (/ 1 (sin B))) (- (* (/ 1 (/ (tan B) x)) 1)))

prune983.0ms

Pruning

10 alts after pruning (7 fresh and 3 done)

Merged error: 0.0b

regimes115.0ms

Accuracy

0% (0.2b remaining)

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

bsearch3.0ms

end0.0ms

sample8.9s

Algorithm
intervals
Results
4.3s1768×body1280valid
2.0s1401×body640valid
1.5s4926×body80valid
702.0ms708×body320valid
200.0ms351×body160valid