\sin \left(x + \varepsilon\right) - \sin x
\left(\cos \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \cos x\right) \cdot \left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot 2\right) + \left(-2 \cdot \sin \left(\frac{1}{2} \cdot \varepsilon\right)\right) \cdot \left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \sin x\right)double f(double x, double eps) {
double r5324351 = x;
double r5324352 = eps;
double r5324353 = r5324351 + r5324352;
double r5324354 = sin(r5324353);
double r5324355 = sin(r5324351);
double r5324356 = r5324354 - r5324355;
return r5324356;
}
double f(double x, double eps) {
double r5324357 = 0.5;
double r5324358 = eps;
double r5324359 = r5324357 * r5324358;
double r5324360 = cos(r5324359);
double r5324361 = x;
double r5324362 = cos(r5324361);
double r5324363 = r5324360 * r5324362;
double r5324364 = sin(r5324359);
double r5324365 = 2.0;
double r5324366 = r5324364 * r5324365;
double r5324367 = r5324363 * r5324366;
double r5324368 = -2.0;
double r5324369 = r5324368 * r5324364;
double r5324370 = sin(r5324361);
double r5324371 = r5324364 * r5324370;
double r5324372 = r5324369 * r5324371;
double r5324373 = r5324367 + r5324372;
return r5324373;
}




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 fma-udef14.9
Applied cos-sum0.3
rmApplied sub-neg0.3
Applied distribute-lft-in0.3
Final simplification0.3
herbie shell --seed 2019168 +o rules:numerics
(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)))