\sin \left(x + \varepsilon\right) - \sin x
\left(\cos \varepsilon - 1\right) \cdot \sin x + \cos x \cdot \sin \varepsilon
double f(double x, double eps) {
double r486392 = x;
double r486393 = eps;
double r486394 = r486392 + r486393;
double r486395 = sin(r486394);
double r486396 = sin(r486392);
double r486397 = r486395 - r486396;
return r486397;
}
double f(double x, double eps) {
double r486398 = eps;
double r486399 = cos(r486398);
double r486400 = 1.0;
double r486401 = r486399 - r486400;
double r486402 = x;
double r486403 = sin(r486402);
double r486404 = r486401 * r486403;
double r486405 = cos(r486402);
double r486406 = sin(r486398);
double r486407 = r486405 * r486406;
double r486408 = r486404 + r486407;
return r486408;
}




Bits error versus x




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