\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, \log \left(e^{\frac{\mathsf{fma}\left(\cos \varepsilon, \cos \varepsilon, -1\right)}{\cos \varepsilon + 1}}\right), \cos x \cdot \sin \varepsilon\right) + \mathsf{fma}\left(-\sin x, 1, \sin x\right)double f(double x, double eps) {
double r87872 = x;
double r87873 = eps;
double r87874 = r87872 + r87873;
double r87875 = sin(r87874);
double r87876 = sin(r87872);
double r87877 = r87875 - r87876;
return r87877;
}
double f(double x, double eps) {
double r87878 = x;
double r87879 = sin(r87878);
double r87880 = eps;
double r87881 = cos(r87880);
double r87882 = 1.0;
double r87883 = -r87882;
double r87884 = fma(r87881, r87881, r87883);
double r87885 = r87881 + r87882;
double r87886 = r87884 / r87885;
double r87887 = exp(r87886);
double r87888 = log(r87887);
double r87889 = cos(r87878);
double r87890 = sin(r87880);
double r87891 = r87889 * r87890;
double r87892 = fma(r87879, r87888, r87891);
double r87893 = -r87879;
double r87894 = fma(r87893, r87882, r87879);
double r87895 = r87892 + r87894;
return r87895;
}




Bits error versus x




Bits error versus eps
| Original | 37.2 |
|---|---|
| Target | 15.0 |
| Herbie | 0.5 |
Initial program 37.2
rmApplied sin-sum22.1
rmApplied add-cube-cbrt22.7
Applied add-sqr-sqrt42.9
Applied prod-diff43.0
Simplified22.4
Simplified0.4
rmApplied add-log-exp0.4
Applied add-log-exp0.5
Applied diff-log0.5
Simplified0.4
rmApplied flip--0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019352 +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)))