\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, \log \left(e^{\frac{{\left(\cos \varepsilon\right)}^{3} - 1}{\mathsf{fma}\left(\cos \varepsilon, \cos \varepsilon + 1, 1\right)}}\right), \cos x \cdot \sin \varepsilon\right)double f(double x, double eps) {
double r137186 = x;
double r137187 = eps;
double r137188 = r137186 + r137187;
double r137189 = sin(r137188);
double r137190 = sin(r137186);
double r137191 = r137189 - r137190;
return r137191;
}
double f(double x, double eps) {
double r137192 = x;
double r137193 = sin(r137192);
double r137194 = eps;
double r137195 = cos(r137194);
double r137196 = 3.0;
double r137197 = pow(r137195, r137196);
double r137198 = 1.0;
double r137199 = r137197 - r137198;
double r137200 = r137195 + r137198;
double r137201 = fma(r137195, r137200, r137198);
double r137202 = r137199 / r137201;
double r137203 = exp(r137202);
double r137204 = log(r137203);
double r137205 = cos(r137192);
double r137206 = sin(r137194);
double r137207 = r137205 * r137206;
double r137208 = fma(r137193, r137204, r137207);
return r137208;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 36.9
rmApplied sin-sum21.7
Taylor expanded around inf 21.7
Simplified0.4
rmApplied add-log-exp0.4
Applied add-log-exp0.4
Applied diff-log0.4
Simplified0.4
rmApplied flip3--0.4
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020001 +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)))