Initial program 39.6
\[\cos \left(x + \varepsilon\right) - \cos x
\]
Applied egg-rr24.4
\[\leadsto \color{blue}{\mathsf{fma}\left(\cos x, \cos \varepsilon, \left(-\sin x\right) \cdot \sin \varepsilon\right)} - \cos x
\]
Taylor expanded in x around inf 24.4
\[\leadsto \color{blue}{\left(-1 \cdot \left(\sin x \cdot \sin \varepsilon\right) + \cos \varepsilon \cdot \cos x\right) - \cos x}
\]
Simplified6.2
\[\leadsto \color{blue}{\mathsf{fma}\left(\sin x, -\sin \varepsilon, \left(\cos \varepsilon + -1\right) \cdot \cos x\right)}
\]
Proof
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (*.f64 (+.f64 (cos.f64 eps) -1) (cos.f64 x))): 0 points increase in error, 0 points decrease in error
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (*.f64 (+.f64 (cos.f64 eps) (Rewrite<= metadata-eval (neg.f64 1))) (cos.f64 x))): 0 points increase in error, 0 points decrease in error
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (*.f64 (Rewrite<= sub-neg_binary64 (-.f64 (cos.f64 eps) 1)) (cos.f64 x))): 0 points increase in error, 0 points decrease in error
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (Rewrite<= *-commutative_binary64 (*.f64 (cos.f64 x) (-.f64 (cos.f64 eps) 1)))): 0 points increase in error, 0 points decrease in error
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (*.f64 (cos.f64 x) (Rewrite=> sub-neg_binary64 (+.f64 (cos.f64 eps) (neg.f64 1))))): 0 points increase in error, 0 points decrease in error
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (*.f64 (cos.f64 x) (+.f64 (cos.f64 eps) (Rewrite=> metadata-eval -1)))): 0 points increase in error, 0 points decrease in error
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (Rewrite<= distribute-rgt-out_binary64 (+.f64 (*.f64 (cos.f64 eps) (cos.f64 x)) (*.f64 -1 (cos.f64 x))))): 10 points increase in error, 11 points decrease in error
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (+.f64 (Rewrite<= *-commutative_binary64 (*.f64 (cos.f64 x) (cos.f64 eps))) (*.f64 -1 (cos.f64 x)))): 0 points increase in error, 0 points decrease in error
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (+.f64 (*.f64 (cos.f64 x) (cos.f64 eps)) (Rewrite<= neg-mul-1_binary64 (neg.f64 (cos.f64 x))))): 0 points increase in error, 0 points decrease in error
(fma.f64 (sin.f64 x) (neg.f64 (sin.f64 eps)) (Rewrite<= sub-neg_binary64 (-.f64 (*.f64 (cos.f64 x) (cos.f64 eps)) (cos.f64 x)))): 0 points increase in error, 0 points decrease in error
(Rewrite<= fma-def_binary64 (+.f64 (*.f64 (sin.f64 x) (neg.f64 (sin.f64 eps))) (-.f64 (*.f64 (cos.f64 x) (cos.f64 eps)) (cos.f64 x)))): 13 points increase in error, 4 points decrease in error
(+.f64 (Rewrite<= distribute-rgt-neg-in_binary64 (neg.f64 (*.f64 (sin.f64 x) (sin.f64 eps)))) (-.f64 (*.f64 (cos.f64 x) (cos.f64 eps)) (cos.f64 x))): 0 points increase in error, 0 points decrease in error
(+.f64 (Rewrite<= mul-1-neg_binary64 (*.f64 -1 (*.f64 (sin.f64 x) (sin.f64 eps)))) (-.f64 (*.f64 (cos.f64 x) (cos.f64 eps)) (cos.f64 x))): 0 points increase in error, 0 points decrease in error
(+.f64 (*.f64 -1 (*.f64 (sin.f64 x) (sin.f64 eps))) (-.f64 (Rewrite=> *-commutative_binary64 (*.f64 (cos.f64 eps) (cos.f64 x))) (cos.f64 x))): 0 points increase in error, 0 points decrease in error
(Rewrite<= associate--l+_binary64 (-.f64 (+.f64 (*.f64 -1 (*.f64 (sin.f64 x) (sin.f64 eps))) (*.f64 (cos.f64 eps) (cos.f64 x))) (cos.f64 x))): 94 points increase in error, 18 points decrease in error
Applied egg-rr0.6
\[\leadsto \mathsf{fma}\left(\sin x, -\sin \varepsilon, \color{blue}{\frac{{\sin \varepsilon}^{2}}{-1 - \cos \varepsilon}} \cdot \cos x\right)
\]
Taylor expanded in x around inf 0.6
\[\leadsto \color{blue}{-1 \cdot \left(\sin x \cdot \sin \varepsilon\right) + -1 \cdot \frac{\cos x \cdot {\sin \varepsilon}^{2}}{1 + \cos \varepsilon}}
\]
Simplified0.3
\[\leadsto \color{blue}{-\mathsf{fma}\left(\sin \varepsilon, \sin x, \left(\tan \left(\frac{\varepsilon}{2}\right) \cdot \sin \varepsilon\right) \cdot \cos x\right)}
\]
Proof
(neg.f64 (fma.f64 (sin.f64 eps) (sin.f64 x) (*.f64 (*.f64 (tan.f64 (/.f64 eps 2)) (sin.f64 eps)) (cos.f64 x)))): 0 points increase in error, 0 points decrease in error
(neg.f64 (fma.f64 (sin.f64 eps) (sin.f64 x) (*.f64 (*.f64 (Rewrite<= hang-0p-tan_binary64 (/.f64 (sin.f64 eps) (+.f64 1 (cos.f64 eps)))) (sin.f64 eps)) (cos.f64 x)))): 40 points increase in error, 7 points decrease in error
(neg.f64 (fma.f64 (sin.f64 eps) (sin.f64 x) (*.f64 (Rewrite<= associate-/r/_binary64 (/.f64 (sin.f64 eps) (/.f64 (+.f64 1 (cos.f64 eps)) (sin.f64 eps)))) (cos.f64 x)))): 31 points increase in error, 14 points decrease in error
(neg.f64 (fma.f64 (sin.f64 eps) (sin.f64 x) (*.f64 (Rewrite<= associate-/l*_binary64 (/.f64 (*.f64 (sin.f64 eps) (sin.f64 eps)) (+.f64 1 (cos.f64 eps)))) (cos.f64 x)))): 18 points increase in error, 25 points decrease in error
(neg.f64 (fma.f64 (sin.f64 eps) (sin.f64 x) (*.f64 (/.f64 (Rewrite<= unpow2_binary64 (pow.f64 (sin.f64 eps) 2)) (+.f64 1 (cos.f64 eps))) (cos.f64 x)))): 0 points increase in error, 0 points decrease in error
(neg.f64 (fma.f64 (sin.f64 eps) (sin.f64 x) (Rewrite=> associate-*l/_binary64 (/.f64 (*.f64 (pow.f64 (sin.f64 eps) 2) (cos.f64 x)) (+.f64 1 (cos.f64 eps)))))): 9 points increase in error, 6 points decrease in error
(neg.f64 (fma.f64 (sin.f64 eps) (sin.f64 x) (/.f64 (Rewrite<= *-commutative_binary64 (*.f64 (cos.f64 x) (pow.f64 (sin.f64 eps) 2))) (+.f64 1 (cos.f64 eps))))): 0 points increase in error, 0 points decrease in error
(neg.f64 (fma.f64 (sin.f64 eps) (sin.f64 x) (Rewrite<= remove-double-neg_binary64 (neg.f64 (neg.f64 (/.f64 (*.f64 (cos.f64 x) (pow.f64 (sin.f64 eps) 2)) (+.f64 1 (cos.f64 eps)))))))): 0 points increase in error, 0 points decrease in error
(neg.f64 (fma.f64 (sin.f64 eps) (sin.f64 x) (neg.f64 (Rewrite<= mul-1-neg_binary64 (*.f64 -1 (/.f64 (*.f64 (cos.f64 x) (pow.f64 (sin.f64 eps) 2)) (+.f64 1 (cos.f64 eps)))))))): 0 points increase in error, 0 points decrease in error
(neg.f64 (Rewrite<= fma-neg_binary64 (-.f64 (*.f64 (sin.f64 eps) (sin.f64 x)) (*.f64 -1 (/.f64 (*.f64 (cos.f64 x) (pow.f64 (sin.f64 eps) 2)) (+.f64 1 (cos.f64 eps))))))): 11 points increase in error, 7 points decrease in error
(neg.f64 (-.f64 (Rewrite<= *-commutative_binary64 (*.f64 (sin.f64 x) (sin.f64 eps))) (*.f64 -1 (/.f64 (*.f64 (cos.f64 x) (pow.f64 (sin.f64 eps) 2)) (+.f64 1 (cos.f64 eps)))))): 0 points increase in error, 0 points decrease in error
(Rewrite<= sub0-neg_binary64 (-.f64 0 (-.f64 (*.f64 (sin.f64 x) (sin.f64 eps)) (*.f64 -1 (/.f64 (*.f64 (cos.f64 x) (pow.f64 (sin.f64 eps) 2)) (+.f64 1 (cos.f64 eps))))))): 0 points increase in error, 0 points decrease in error
(Rewrite<= associate-+l-_binary64 (+.f64 (-.f64 0 (*.f64 (sin.f64 x) (sin.f64 eps))) (*.f64 -1 (/.f64 (*.f64 (cos.f64 x) (pow.f64 (sin.f64 eps) 2)) (+.f64 1 (cos.f64 eps)))))): 0 points increase in error, 0 points decrease in error
(+.f64 (Rewrite<= neg-sub0_binary64 (neg.f64 (*.f64 (sin.f64 x) (sin.f64 eps)))) (*.f64 -1 (/.f64 (*.f64 (cos.f64 x) (pow.f64 (sin.f64 eps) 2)) (+.f64 1 (cos.f64 eps))))): 0 points increase in error, 0 points decrease in error
(+.f64 (Rewrite<= mul-1-neg_binary64 (*.f64 -1 (*.f64 (sin.f64 x) (sin.f64 eps)))) (*.f64 -1 (/.f64 (*.f64 (cos.f64 x) (pow.f64 (sin.f64 eps) 2)) (+.f64 1 (cos.f64 eps))))): 0 points increase in error, 0 points decrease in error
Final simplification0.3
\[\leadsto -\mathsf{fma}\left(\sin \varepsilon, \sin x, \left(\sin \varepsilon \cdot \tan \left(\frac{\varepsilon}{2}\right)\right) \cdot \cos x\right)
\]