\sin \left(x + \varepsilon\right) - \sin x
\left(2 \cdot \sin \left(\frac{1}{2} \cdot \varepsilon\right)\right) \cdot \left(\cos \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \cos x\right) + \left(-2 \cdot \sin \left(\frac{1}{2} \cdot \varepsilon\right)\right) \cdot \left(\sin x \cdot \sin \left(\frac{1}{2} \cdot \varepsilon\right)\right)double f(double x, double eps) {
double r6102908 = x;
double r6102909 = eps;
double r6102910 = r6102908 + r6102909;
double r6102911 = sin(r6102910);
double r6102912 = sin(r6102908);
double r6102913 = r6102911 - r6102912;
return r6102913;
}
double f(double x, double eps) {
double r6102914 = 2.0;
double r6102915 = 0.5;
double r6102916 = eps;
double r6102917 = r6102915 * r6102916;
double r6102918 = sin(r6102917);
double r6102919 = r6102914 * r6102918;
double r6102920 = cos(r6102917);
double r6102921 = x;
double r6102922 = cos(r6102921);
double r6102923 = r6102920 * r6102922;
double r6102924 = r6102919 * r6102923;
double r6102925 = -2.0;
double r6102926 = r6102925 * r6102918;
double r6102927 = sin(r6102921);
double r6102928 = r6102927 * r6102918;
double r6102929 = r6102926 * r6102928;
double r6102930 = r6102924 + r6102929;
return r6102930;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.8 |
|---|---|
| Target | 14.9 |
| Herbie | 0.3 |
Initial program 36.8
rmApplied diff-sin37.1
Simplified14.9
Taylor expanded around inf 14.9
Simplified14.9
rmApplied cos-sum0.3
rmApplied sub-neg0.3
Applied distribute-rgt-in0.3
Final simplification0.3
herbie shell --seed 2019168
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2.0 (* (cos (+ x (/ eps 2.0))) (sin (/ eps 2.0))))
(- (sin (+ x eps)) (sin x)))