Average Error: 31.5 → 0.4
Time: 27.0s
Precision: 64
Internal Precision: 128
\[\frac{1 - \cos x}{x \cdot x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.009811382121909702 \lor \neg \left(x \le 1.1266718384430646 \cdot 10^{-21}\right):\\ \;\;\;\;\frac{1}{x \cdot x} \cdot \left(\tan \left(\frac{x}{2}\right) \cdot \sin x\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{1}{720} \cdot {x}^{4} + \frac{1}{2}\right) - \frac{1}{24} \cdot {x}^{2}\\ \end{array}\]

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if x < -0.009811382121909702 or 1.1266718384430646e-21 < x

    1. Initial program 2.7

      \[\frac{1 - \cos x}{x \cdot x}\]
    2. Using strategy rm
    3. Applied flip--2.9

      \[\leadsto \frac{\color{blue}{\frac{1 \cdot 1 - \cos x \cdot \cos x}{1 + \cos x}}}{x \cdot x}\]
    4. Applied associate-/l/2.9

      \[\leadsto \color{blue}{\frac{1 \cdot 1 - \cos x \cdot \cos x}{\left(x \cdot x\right) \cdot \left(1 + \cos x\right)}}\]
    5. Simplified1.0

      \[\leadsto \frac{\color{blue}{\sin x \cdot \sin x}}{\left(x \cdot x\right) \cdot \left(1 + \cos x\right)}\]
    6. Taylor expanded around inf 1.0

      \[\leadsto \color{blue}{\frac{{\left(\sin x\right)}^{2}}{{x}^{2} \cdot \left(\cos x + 1\right)}}\]
    7. Simplified0.7

      \[\leadsto \color{blue}{\frac{\tan \left(\frac{x}{2}\right)}{\frac{x \cdot x}{\sin x}}}\]
    8. Using strategy rm
    9. Applied div-inv0.8

      \[\leadsto \frac{\tan \left(\frac{x}{2}\right)}{\color{blue}{\left(x \cdot x\right) \cdot \frac{1}{\sin x}}}\]
    10. Applied *-un-lft-identity0.8

      \[\leadsto \frac{\color{blue}{1 \cdot \tan \left(\frac{x}{2}\right)}}{\left(x \cdot x\right) \cdot \frac{1}{\sin x}}\]
    11. Applied times-frac0.8

      \[\leadsto \color{blue}{\frac{1}{x \cdot x} \cdot \frac{\tan \left(\frac{x}{2}\right)}{\frac{1}{\sin x}}}\]
    12. Simplified0.8

      \[\leadsto \frac{1}{x \cdot x} \cdot \color{blue}{\left(\sin x \cdot \tan \left(\frac{x}{2}\right)\right)}\]

    if -0.009811382121909702 < x < 1.1266718384430646e-21

    1. Initial program 61.8

      \[\frac{1 - \cos x}{x \cdot x}\]
    2. Using strategy rm
    3. Applied flip--61.8

      \[\leadsto \frac{\color{blue}{\frac{1 \cdot 1 - \cos x \cdot \cos x}{1 + \cos x}}}{x \cdot x}\]
    4. Applied associate-/l/61.8

      \[\leadsto \color{blue}{\frac{1 \cdot 1 - \cos x \cdot \cos x}{\left(x \cdot x\right) \cdot \left(1 + \cos x\right)}}\]
    5. Simplified30.9

      \[\leadsto \frac{\color{blue}{\sin x \cdot \sin x}}{\left(x \cdot x\right) \cdot \left(1 + \cos x\right)}\]
    6. Taylor expanded around 0 0.0

      \[\leadsto \color{blue}{\left(\frac{1}{720} \cdot {x}^{4} + \frac{1}{2}\right) - \frac{1}{24} \cdot {x}^{2}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.009811382121909702 \lor \neg \left(x \le 1.1266718384430646 \cdot 10^{-21}\right):\\ \;\;\;\;\frac{1}{x \cdot x} \cdot \left(\tan \left(\frac{x}{2}\right) \cdot \sin x\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{1}{720} \cdot {x}^{4} + \frac{1}{2}\right) - \frac{1}{24} \cdot {x}^{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019018 
(FPCore (x)
  :name "cos2 (problem 3.4.1)"
  (/ (- 1 (cos x)) (* x x)))

Details

Time bar (total: 26.2s)Debug log

sample123.0ms

Algorithm
intervals
Results
53.0ms49×body2560valid
21.0ms35×body1280valid
19.0ms41×body640valid
14.0ms46×body320valid
7.0ms68×body80valid
4.0ms17×body160valid

simplify27.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
27.0ms
(/ (- 1 (cos x)) (* x x))

prune8.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 28.9b

localize23.0ms

Local error

Found 2 expressions with local error:

14.3b
(/ (- 1 (cos x)) (* x x))
1.4b
(- 1 (cos x))

rewrite33.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
add-exp-log
add-cbrt-cube
*-un-lft-identity
add-sqr-sqrt
associate-/l*
times-frac
associate-/l/
add-log-exp
flip--
flip3--
pow1
div-inv
div-exp
div-sub
frac-2neg
sub-neg
associate-/r*
clear-num
cbrt-undiv
Counts
2 → 33
Calls
2 calls:
Slowest
31.0ms
(/ (- 1 (cos x)) (* x x))
2.0ms
(- 1 (cos x))

series85.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
55.0ms
(/ (- 1 (cos x)) (* x x))
30.0ms
(- 1 (cos x))

simplify722.0ms

Counts
19 → 39
Calls
19 calls:
Slowest
445.0ms
(/ (* (* (- 1 (cos x)) (- 1 (cos x))) (- 1 (cos x))) (* (* (* x x) (* x x)) (* x x)))
72.0ms
(- (+ (* 1/720 (pow x 4)) 1/2) (* 1/24 (pow x 2)))
51.0ms
(- (+ (* 1/2 (pow x 2)) (* 1/720 (pow x 6))) (* 1/24 (pow x 4)))
37.0ms
(- (log (- 1 (cos x))) (log (* x x)))
28.0ms
(/ (- 1 (cos x)) (pow x 2))

prune279.0ms

Pruning

8 alts after pruning (8 fresh and 0 done)

Merged error: 0.0b

localize36.0ms

Local error

Found 4 expressions with local error:

14.3b
(/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))
0.4b
(+ 1 (cos x))
0.2b
(* (sin x) (sin x))
0.1b
(* (* x x) (+ 1 (cos x)))

rewrite32.0ms

Algorithm
rewrite-expression-head
Rules
20×add-exp-log
20×add-cbrt-cube
11×pow1
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
cbrt-unprod
prod-exp
associate-*r*
add-log-exp
associate-*r/
associate-*l*
div-exp
cbrt-undiv
flip-+
flip3-+
sin-mult
sqr-sin
*-commutative
associate-/r/
pow-prod-down
associate-/l/
associate-/l*
div-inv
pow-prod-up
div-sub
pow-plus
times-frac
distribute-lft-in
frac-2neg
associate-/r*
clear-num
+-commutative
distribute-rgt-in
pow2
Counts
4 → 76
Calls
4 calls:
Slowest
15.0ms
(/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))
7.0ms
(* (* x x) (+ 1 (cos x)))
7.0ms
(* (sin x) (sin x))
1.0ms
(+ 1 (cos x))

series146.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
71.0ms
(/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))
38.0ms
(* (* x x) (+ 1 (cos x)))
23.0ms
(* (sin x) (sin x))
14.0ms
(+ 1 (cos x))

simplify5.0s

Counts
51 → 88
Calls
51 calls:
Slowest
1.0s
(* (* (* (* x x) (* x x)) (* x x)) (* (* (+ 1 (cos x)) (+ 1 (cos x))) (+ 1 (cos x))))
466.0ms
(/ (* (* (* (sin x) (sin x)) (sin x)) (* (* (sin x) (sin x)) (sin x))) (* (* (* (* x x) (+ 1 (cos x))) (* (* x x) (+ 1 (cos x)))) (* (* x x) (+ 1 (cos x)))))
366.0ms
(/ (* (* (* (sin x) (sin x)) (* (sin x) (sin x))) (* (sin x) (sin x))) (* (* (* (* x x) (+ 1 (cos x))) (* (* x x) (+ 1 (cos x)))) (* (* x x) (+ 1 (cos x)))))
345.0ms
(/ (* (* (* (sin x) (sin x)) (* (sin x) (sin x))) (* (sin x) (sin x))) (* (* (* (* x x) (* x x)) (* x x)) (* (* (+ 1 (cos x)) (+ 1 (cos x))) (+ 1 (cos x)))))
338.0ms
(- (+ (log (sin x)) (log (sin x))) (log (* (* x x) (+ 1 (cos x)))))

prune757.0ms

Pruning

8 alts after pruning (8 fresh and 0 done)

Merged error: 0b

localize22.0ms

Local error

Found 2 expressions with local error:

13.8b
(/ (* x x) (sin x))
0.2b
(/ (tan (/ x 2)) (/ (* x x) (sin x)))

rewrite17.0ms

Algorithm
rewrite-expression-head
Rules
36×times-frac
20×add-cube-cbrt
20×*-un-lft-identity
20×add-sqr-sqrt
10×associate-/r*
add-exp-log
add-cbrt-cube
div-inv
associate-/l*
div-exp
cbrt-undiv
add-log-exp
frac-2neg
clear-num
pow1
associate-/l/
associate-/r/
tan-quot
Counts
2 → 66
Calls
2 calls:
Slowest
10.0ms
(/ (tan (/ x 2)) (/ (* x x) (sin x)))
5.0ms
(/ (* x x) (sin x))

series120.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
78.0ms
(/ (tan (/ x 2)) (/ (* x x) (sin x)))
42.0ms
(/ (* x x) (sin x))

simplify2.1s

Counts
74 → 72
Calls
74 calls:
Slowest
601.0ms
(/ (* (* (tan (/ x 2)) (tan (/ x 2))) (tan (/ x 2))) (* (* (/ (* x x) (sin x)) (/ (* x x) (sin x))) (/ (* x x) (sin x))))
269.0ms
(/ (* (* (* x x) (* x x)) (* x x)) (* (* (sin x) (sin x)) (sin x)))
151.0ms
(/ (* (sin x) (sin (* 1/2 x))) (* (cos (* 1/2 x)) (pow x 2)))
135.0ms
(/ (* (sin x) (sin (* 1/2 x))) (* (cos (* 1/2 x)) (pow x 2)))
93.0ms
(- (log (tan (/ x 2))) (- (log (* x x)) (log (sin x))))

prune435.0ms

Pruning

8 alts after pruning (7 fresh and 1 done)

Merged error: 0b

localize7.0ms

Local error

Found 4 expressions with local error:

14.3b
(/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))
14.3b
(/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))
12.1b
(sqrt (/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x)))))
12.1b
(sqrt (/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x)))))

rewrite21.0ms

Algorithm
rewrite-expression-head
Rules
28×add-exp-log
28×add-cbrt-cube
14×sqrt-prod
cbrt-unprod
associate-/r/
associate-*r/
prod-exp
div-exp
cbrt-undiv
add-sqr-sqrt
add-cube-cbrt
*-un-lft-identity
add-log-exp
div-inv
flip-+
times-frac
flip3-+
pow1
associate-/l/
associate-/l*
sin-mult
sqr-sin
div-sub
sqrt-div
pow1/2
frac-2neg
associate-/r*
clear-num
rem-sqrt-square
Counts
4 → 84
Calls
4 calls:
Slowest
8.0ms
(/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))
8.0ms
(/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))
2.0ms
(sqrt (/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x)))))
2.0ms
(sqrt (/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x)))))

series254.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
88.0ms
(sqrt (/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x)))))
63.0ms
(sqrt (/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x)))))
60.0ms
(/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))
44.0ms
(/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))

simplify9.4s

Counts
62 → 96
Calls
62 calls:
Slowest
715.0ms
(/ (* (* (* (sin x) (sin x)) (sin x)) (* (* (sin x) (sin x)) (sin x))) (* (* (* (* x x) (+ 1 (cos x))) (* (* x x) (+ 1 (cos x)))) (* (* x x) (+ 1 (cos x)))))
473.0ms
(sqrt (/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x)))))
399.0ms
(sqrt (sqrt (/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x))))))
395.0ms
(sqrt (/ (* (sin x) (sin x)) (* (* x x) (+ 1 (cos x)))))
384.0ms
(/ (* (* (* (sin x) (sin x)) (sin x)) (* (* (sin x) (sin x)) (sin x))) (* (* (* (* x x) (+ 1 (cos x))) (* (* x x) (+ 1 (cos x)))) (* (* x x) (+ 1 (cos x)))))

prune1.3s

Pruning

8 alts after pruning (6 fresh and 2 done)

Merged error: 0b

regimes92.0ms

Accuracy

97.7% (0.4b remaining)

Error of 0.4b against oracle of 0.0b and baseline of 15.8b

bsearch164.0ms

end0.0ms

sample4.9s

Algorithm
intervals
Results
1.9s1691×body2560valid
1.4s1229×body1280valid
827.0ms1450×body640valid
357.0ms906×body320valid
234.0ms2229×body80valid
176.0ms495×body160valid