\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, \frac{\mathsf{log1p}\left(\mathsf{expm1}\left({\left(\cos \varepsilon\right)}^{3} - 1\right)\right)}{\mathsf{fma}\left(\cos \varepsilon, \cos \varepsilon + 1, 1\right)}, \cos x \cdot \sin \varepsilon\right)double f(double x, double eps) {
double r108084 = x;
double r108085 = eps;
double r108086 = r108084 + r108085;
double r108087 = sin(r108086);
double r108088 = sin(r108084);
double r108089 = r108087 - r108088;
return r108089;
}
double f(double x, double eps) {
double r108090 = x;
double r108091 = sin(r108090);
double r108092 = eps;
double r108093 = cos(r108092);
double r108094 = 3.0;
double r108095 = pow(r108093, r108094);
double r108096 = 1.0;
double r108097 = r108095 - r108096;
double r108098 = expm1(r108097);
double r108099 = log1p(r108098);
double r108100 = r108093 + r108096;
double r108101 = fma(r108093, r108100, r108096);
double r108102 = r108099 / r108101;
double r108103 = cos(r108090);
double r108104 = sin(r108092);
double r108105 = r108103 * r108104;
double r108106 = fma(r108091, r108102, r108105);
return r108106;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 15.3 |
| Herbie | 0.4 |
Initial program 36.9
rmApplied sin-sum21.4
Taylor expanded around inf 21.4
Simplified0.4
rmApplied flip3--0.4
Simplified0.4
Simplified0.4
rmApplied log1p-expm1-u0.4
Final simplification0.4
herbie shell --seed 2019354 +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)))