\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, \log \left(e^{\cos \varepsilon - 1}\right), \cos x \cdot \sin \varepsilon\right)double f(double x, double eps) {
double r122933 = x;
double r122934 = eps;
double r122935 = r122933 + r122934;
double r122936 = sin(r122935);
double r122937 = sin(r122933);
double r122938 = r122936 - r122937;
return r122938;
}
double f(double x, double eps) {
double r122939 = x;
double r122940 = sin(r122939);
double r122941 = eps;
double r122942 = cos(r122941);
double r122943 = 1.0;
double r122944 = r122942 - r122943;
double r122945 = exp(r122944);
double r122946 = log(r122945);
double r122947 = cos(r122939);
double r122948 = sin(r122941);
double r122949 = r122947 * r122948;
double r122950 = fma(r122940, r122946, r122949);
return r122950;
}




Bits error versus x




Bits error versus eps
| Original | 37.3 |
|---|---|
| Target | 15.7 |
| Herbie | 0.4 |
Initial program 37.3
rmApplied sin-sum21.5
Applied associate--l+21.6
Taylor expanded around inf 21.5
Simplified0.4
rmApplied add-log-exp0.4
Applied add-log-exp0.4
Applied diff-log0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2020002 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:precision binary64
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))