\sin \left(x + \varepsilon\right) - \sin x
2 \cdot \left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \mathsf{fma}\left(\cos \left(\frac{1}{2} \cdot \varepsilon\right), \cos x, \left(-\sin \left(\frac{1}{2} \cdot \varepsilon\right)\right) \cdot \sin x\right)\right)double f(double x, double eps) {
double r76146 = x;
double r76147 = eps;
double r76148 = r76146 + r76147;
double r76149 = sin(r76148);
double r76150 = sin(r76146);
double r76151 = r76149 - r76150;
return r76151;
}
double f(double x, double eps) {
double r76152 = 2.0;
double r76153 = 0.5;
double r76154 = eps;
double r76155 = r76153 * r76154;
double r76156 = sin(r76155);
double r76157 = cos(r76155);
double r76158 = x;
double r76159 = cos(r76158);
double r76160 = -r76156;
double r76161 = sin(r76158);
double r76162 = r76160 * r76161;
double r76163 = fma(r76157, r76159, r76162);
double r76164 = r76156 * r76163;
double r76165 = r76152 * r76164;
return r76165;
}




Bits error versus x




Bits error versus eps
| Original | 36.7 |
|---|---|
| Target | 15.0 |
| Herbie | 0.3 |
Initial program 36.7
rmApplied diff-sin37.0
Simplified15.1
Taylor expanded around inf 15.0
Simplified15.0
rmApplied fma-udef15.0
Applied cos-sum0.3
rmApplied fma-neg0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019198 +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)))