\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, \mathsf{fma}\left(\sqrt[3]{\cos \varepsilon} \cdot \sqrt[3]{\cos \varepsilon}, \sqrt[3]{\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 r95110 = x;
double r95111 = eps;
double r95112 = r95110 + r95111;
double r95113 = sin(r95112);
double r95114 = sin(r95110);
double r95115 = r95113 - r95114;
return r95115;
}
double f(double x, double eps) {
double r95116 = x;
double r95117 = sin(r95116);
double r95118 = eps;
double r95119 = cos(r95118);
double r95120 = cbrt(r95119);
double r95121 = r95120 * r95120;
double r95122 = 1.0;
double r95123 = -r95122;
double r95124 = fma(r95121, r95120, r95123);
double r95125 = cos(r95116);
double r95126 = sin(r95118);
double r95127 = r95125 * r95126;
double r95128 = fma(r95117, r95124, r95127);
double r95129 = -r95117;
double r95130 = fma(r95129, r95122, r95117);
double r95131 = r95128 + r95130;
return r95131;
}




Bits error versus x




Bits error versus eps
| Original | 36.7 |
|---|---|
| Target | 14.8 |
| Herbie | 0.5 |
Initial program 36.7
rmApplied sin-sum21.8
rmApplied add-cube-cbrt22.3
Applied add-sqr-sqrt43.5
Applied prod-diff43.5
Simplified22.1
Simplified0.4
rmApplied add-cube-cbrt0.5
Applied fma-neg0.5
Final simplification0.5
herbie shell --seed 2019356 +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)))