\sin \left(x + \varepsilon\right) - \sin x
\left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot 2\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 r11959367 = x;
double r11959368 = eps;
double r11959369 = r11959367 + r11959368;
double r11959370 = sin(r11959369);
double r11959371 = sin(r11959367);
double r11959372 = r11959370 - r11959371;
return r11959372;
}
double f(double x, double eps) {
double r11959373 = 0.5;
double r11959374 = eps;
double r11959375 = r11959373 * r11959374;
double r11959376 = sin(r11959375);
double r11959377 = 2.0;
double r11959378 = r11959376 * r11959377;
double r11959379 = cos(r11959375);
double r11959380 = x;
double r11959381 = cos(r11959380);
double r11959382 = r11959379 * r11959381;
double r11959383 = r11959378 * r11959382;
double r11959384 = -2.0;
double r11959385 = r11959384 * r11959376;
double r11959386 = sin(r11959380);
double r11959387 = r11959386 * r11959376;
double r11959388 = r11959385 * r11959387;
double r11959389 = r11959383 + r11959388;
return r11959389;
}




Bits error versus x




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