double f(double x, double eps) {
double r6985304 = x;
double r6985305 = eps;
double r6985306 = r6985304 + r6985305;
double r6985307 = sin(r6985306);
double r6985308 = sin(r6985304);
double r6985309 = r6985307 - r6985308;
return r6985309;
}
double f(double x, double eps) {
double r6985310 = 2.0;
double r6985311 = 0.5;
double r6985312 = eps;
double r6985313 = r6985311 * r6985312;
double r6985314 = sin(r6985313);
double r6985315 = cos(r6985313);
double r6985316 = x;
double r6985317 = cos(r6985316);
double r6985318 = -r6985314;
double r6985319 = sin(r6985316);
double r6985320 = r6985318 * r6985319;
double r6985321 = fma(r6985315, r6985317, r6985320);
double r6985322 = r6985314 * r6985321;
double r6985323 = r6985310 * r6985322;
return r6985323;
}
\sin \left(x + \varepsilon\right) - \sin x
2 \cdot \left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot (\left(\cos \left(\frac{1}{2} \cdot \varepsilon\right)\right) \cdot \left(\cos x\right) + \left(\left(-\sin \left(\frac{1}{2} \cdot \varepsilon\right)\right) \cdot \sin x\right))_*\right)



Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 15.1 |
| Herbie | 0.3 |
Initial program 37.1
rmApplied diff-sin37.3
Simplified15.1
Taylor expanded around inf 15.1
Simplified15.1
rmApplied fma-udef15.1
Applied cos-sum0.3
rmApplied fma-neg0.3
Final simplification0.3
herbie shell --seed 2019101 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))