\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, {\left({\left(\cos \varepsilon - 1\right)}^{2}\right)}^{\frac{1}{3}} \cdot \sqrt[3]{\cos \varepsilon - 1}, \cos x \cdot \sin \varepsilon\right) + \mathsf{fma}\left(-\sin x, 1, \sin x \cdot 1\right)double f(double x, double eps) {
double r152127 = x;
double r152128 = eps;
double r152129 = r152127 + r152128;
double r152130 = sin(r152129);
double r152131 = sin(r152127);
double r152132 = r152130 - r152131;
return r152132;
}
double f(double x, double eps) {
double r152133 = x;
double r152134 = sin(r152133);
double r152135 = eps;
double r152136 = cos(r152135);
double r152137 = 1.0;
double r152138 = r152136 - r152137;
double r152139 = 2.0;
double r152140 = pow(r152138, r152139);
double r152141 = 0.3333333333333333;
double r152142 = pow(r152140, r152141);
double r152143 = cbrt(r152138);
double r152144 = r152142 * r152143;
double r152145 = cos(r152133);
double r152146 = sin(r152135);
double r152147 = r152145 * r152146;
double r152148 = fma(r152134, r152144, r152147);
double r152149 = -r152134;
double r152150 = r152134 * r152137;
double r152151 = fma(r152149, r152137, r152150);
double r152152 = r152148 + r152151;
return r152152;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 14.8 |
| Herbie | 0.4 |
Initial program 36.9
rmApplied sin-sum22.0
Applied associate--l+22.0
rmApplied *-un-lft-identity22.0
Applied prod-diff22.0
Applied associate-+r+22.0
Simplified0.4
rmApplied add-cube-cbrt0.5
rmApplied pow1/332.7
Applied pow1/332.7
Applied pow-prod-down0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020081 +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)))