\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1230266.91359658050350844860076904296875:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\
\mathbf{elif}\;\varepsilon \le 9.294677533277005823102466302784718799046 \cdot 10^{-9}:\\
\;\;\;\;2 \cdot \left(\cos \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right) \cdot \sin \left(\frac{1}{2} \cdot \varepsilon\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\
\end{array}double f(double x, double eps) {
double r5273290 = x;
double r5273291 = eps;
double r5273292 = r5273290 + r5273291;
double r5273293 = sin(r5273292);
double r5273294 = sin(r5273290);
double r5273295 = r5273293 - r5273294;
return r5273295;
}
double f(double x, double eps) {
double r5273296 = eps;
double r5273297 = -1230266.9135965805;
bool r5273298 = r5273296 <= r5273297;
double r5273299 = x;
double r5273300 = cos(r5273299);
double r5273301 = sin(r5273296);
double r5273302 = r5273300 * r5273301;
double r5273303 = sin(r5273299);
double r5273304 = r5273302 - r5273303;
double r5273305 = cos(r5273296);
double r5273306 = r5273303 * r5273305;
double r5273307 = r5273304 + r5273306;
double r5273308 = 9.294677533277006e-09;
bool r5273309 = r5273296 <= r5273308;
double r5273310 = 2.0;
double r5273311 = fma(r5273310, r5273299, r5273296);
double r5273312 = r5273311 / r5273310;
double r5273313 = cos(r5273312);
double r5273314 = 0.5;
double r5273315 = r5273314 * r5273296;
double r5273316 = sin(r5273315);
double r5273317 = r5273313 * r5273316;
double r5273318 = r5273310 * r5273317;
double r5273319 = r5273309 ? r5273318 : r5273307;
double r5273320 = r5273298 ? r5273307 : r5273319;
return r5273320;
}




Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 0.7 |
if eps < -1230266.9135965805 or 9.294677533277006e-09 < eps Initial program 29.9
rmApplied sin-sum0.5
Applied associate--l+0.5
if -1230266.9135965805 < eps < 9.294677533277006e-09Initial program 44.4
rmApplied diff-sin44.4
Simplified0.9
Final simplification0.7
herbie shell --seed 2019171 +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)))