\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -0.03050652900604648373739102851232019020244:\\
\;\;\;\;\frac{\left(\sin x \cdot \left(\cos \varepsilon - 1\right) + \cos x \cdot \sin \varepsilon\right) \cdot \left(\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) + \sin x\right)}{\sin x \cdot \left(\cos \varepsilon + 1\right) + \cos x \cdot \sin \varepsilon}\\
\mathbf{elif}\;\varepsilon \le 0.03268722773714166640601774815877433866262:\\
\;\;\;\;1 \cdot \left(\sin x \cdot \left(\frac{1}{24} \cdot {\varepsilon}^{4} - \left(\frac{1}{2} \cdot {\varepsilon}^{2} + \frac{1}{720} \cdot {\varepsilon}^{6}\right)\right) + \cos x \cdot \sin \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right)}^{3} - {\left(\sin x\right)}^{3}}{\left(\sin \varepsilon \cdot \cos x + \sin x \cdot \cos \varepsilon\right) \cdot \left(\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) + \sin x\right) + \sin x \cdot \sin x}\\
\end{array}double f(double x, double eps) {
double r158192 = x;
double r158193 = eps;
double r158194 = r158192 + r158193;
double r158195 = sin(r158194);
double r158196 = sin(r158192);
double r158197 = r158195 - r158196;
return r158197;
}
double f(double x, double eps) {
double r158198 = eps;
double r158199 = -0.030506529006046484;
bool r158200 = r158198 <= r158199;
double r158201 = x;
double r158202 = sin(r158201);
double r158203 = cos(r158198);
double r158204 = 1.0;
double r158205 = r158203 - r158204;
double r158206 = r158202 * r158205;
double r158207 = cos(r158201);
double r158208 = sin(r158198);
double r158209 = r158207 * r158208;
double r158210 = r158206 + r158209;
double r158211 = r158202 * r158203;
double r158212 = r158211 + r158209;
double r158213 = r158212 + r158202;
double r158214 = r158210 * r158213;
double r158215 = r158203 + r158204;
double r158216 = r158202 * r158215;
double r158217 = r158216 + r158209;
double r158218 = r158214 / r158217;
double r158219 = 0.032687227737141666;
bool r158220 = r158198 <= r158219;
double r158221 = 0.041666666666666664;
double r158222 = 4.0;
double r158223 = pow(r158198, r158222);
double r158224 = r158221 * r158223;
double r158225 = 0.5;
double r158226 = 2.0;
double r158227 = pow(r158198, r158226);
double r158228 = r158225 * r158227;
double r158229 = 0.001388888888888889;
double r158230 = 6.0;
double r158231 = pow(r158198, r158230);
double r158232 = r158229 * r158231;
double r158233 = r158228 + r158232;
double r158234 = r158224 - r158233;
double r158235 = r158202 * r158234;
double r158236 = r158235 + r158209;
double r158237 = r158204 * r158236;
double r158238 = 3.0;
double r158239 = pow(r158212, r158238);
double r158240 = pow(r158202, r158238);
double r158241 = r158239 - r158240;
double r158242 = r158208 * r158207;
double r158243 = r158242 + r158211;
double r158244 = r158243 * r158213;
double r158245 = r158202 * r158202;
double r158246 = r158244 + r158245;
double r158247 = r158241 / r158246;
double r158248 = r158220 ? r158237 : r158247;
double r158249 = r158200 ? r158218 : r158248;
return r158249;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.2 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
if eps < -0.030506529006046484Initial program 29.6
rmApplied sin-sum0.4
rmApplied flip--0.6
Simplified0.5
Simplified0.7
if -0.030506529006046484 < eps < 0.032687227737141666Initial program 44.7
rmApplied sin-sum44.0
rmApplied *-un-lft-identity44.0
Applied *-un-lft-identity44.0
Applied distribute-lft-out--44.0
Simplified0.3
Taylor expanded around 0 0.1
if 0.032687227737141666 < eps Initial program 30.0
rmApplied sin-sum0.4
rmApplied flip3--0.6
Simplified0.6
Final simplification0.4
herbie shell --seed 2019318
(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)))