\sin \left(x + \varepsilon\right) - \sin x
\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin \varepsilon, \cos x, \sin x \cdot \cos \varepsilon - \sin x\right)\right)\right)double f(double x, double eps) {
double r7503299 = x;
double r7503300 = eps;
double r7503301 = r7503299 + r7503300;
double r7503302 = sin(r7503301);
double r7503303 = sin(r7503299);
double r7503304 = r7503302 - r7503303;
return r7503304;
}
double f(double x, double eps) {
double r7503305 = eps;
double r7503306 = sin(r7503305);
double r7503307 = x;
double r7503308 = cos(r7503307);
double r7503309 = sin(r7503307);
double r7503310 = cos(r7503305);
double r7503311 = r7503309 * r7503310;
double r7503312 = r7503311 - r7503309;
double r7503313 = fma(r7503306, r7503308, r7503312);
double r7503314 = expm1(r7503313);
double r7503315 = log1p(r7503314);
return r7503315;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 15.1 |
| Herbie | 0.5 |
Initial program 36.9
rmApplied sin-sum21.7
rmApplied add-cube-cbrt21.8
Applied associate-*l*21.8
rmApplied log1p-expm1-u21.9
Simplified0.5
Final simplification0.5
herbie shell --seed 2019192 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2.0 (* (cos (+ x (/ eps 2.0))) (sin (/ eps 2.0))))
(- (sin (+ x eps)) (sin x)))