\sin \left(x + \varepsilon\right) - \sin x
\sin x \cdot \left(\left(-\sin \varepsilon\right) \cdot \tan \left(\frac{\varepsilon}{2}\right)\right) + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r98113 = x;
double r98114 = eps;
double r98115 = r98113 + r98114;
double r98116 = sin(r98115);
double r98117 = sin(r98113);
double r98118 = r98116 - r98117;
return r98118;
}
double f(double x, double eps) {
double r98119 = x;
double r98120 = sin(r98119);
double r98121 = eps;
double r98122 = sin(r98121);
double r98123 = -r98122;
double r98124 = 2.0;
double r98125 = r98121 / r98124;
double r98126 = tan(r98125);
double r98127 = r98123 * r98126;
double r98128 = r98120 * r98127;
double r98129 = cos(r98119);
double r98130 = r98129 * r98122;
double r98131 = r98128 + r98130;
return r98131;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.7 |
|---|---|
| Target | 15.0 |
| Herbie | 0.2 |
Initial program 36.7
rmApplied sin-sum21.5
rmApplied *-un-lft-identity21.5
Applied *-un-lft-identity21.5
Applied distribute-lft-out--21.5
Simplified0.4
rmApplied flip--0.5
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied distribute-lft-neg-in0.4
Applied times-frac0.4
Simplified0.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2020021
(FPCore (x eps)
:name "2sin (example 3.3)"
:precision binary64
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))