\sin \left(x + \varepsilon\right) - \sin x
2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \mathsf{fma}\left(\left(\cos \left(\varepsilon \cdot \frac{1}{2}\right)\right), \left(\cos x\right), \left(-\sin \left(\varepsilon \cdot \frac{1}{2}\right) \cdot \sin x\right)\right)\right)double f(double x, double eps) {
double r3688063 = x;
double r3688064 = eps;
double r3688065 = r3688063 + r3688064;
double r3688066 = sin(r3688065);
double r3688067 = sin(r3688063);
double r3688068 = r3688066 - r3688067;
return r3688068;
}
double f(double x, double eps) {
double r3688069 = 2.0;
double r3688070 = eps;
double r3688071 = r3688070 / r3688069;
double r3688072 = sin(r3688071);
double r3688073 = 0.5;
double r3688074 = r3688070 * r3688073;
double r3688075 = cos(r3688074);
double r3688076 = x;
double r3688077 = cos(r3688076);
double r3688078 = sin(r3688074);
double r3688079 = sin(r3688076);
double r3688080 = r3688078 * r3688079;
double r3688081 = -r3688080;
double r3688082 = fma(r3688075, r3688077, r3688081);
double r3688083 = r3688072 * r3688082;
double r3688084 = r3688069 * r3688083;
return r3688084;
}




Bits error versus x




Bits error versus eps
| Original | 37.2 |
|---|---|
| Target | 14.9 |
| Herbie | 0.3 |
Initial program 37.2
rmApplied diff-sin37.5
Simplified14.9
Taylor expanded around inf 14.9
Simplified14.9
rmApplied fma-udef14.9
Applied cos-sum0.3
rmApplied fma-neg0.3
Final simplification0.3
herbie shell --seed 2019130 +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)))