\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.2067536048493133 \cdot 10^{-08}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 6.162253177009699 \cdot 10^{-09}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\end{array}double f(double x, double eps) {
double r11263144 = x;
double r11263145 = eps;
double r11263146 = r11263144 + r11263145;
double r11263147 = sin(r11263146);
double r11263148 = sin(r11263144);
double r11263149 = r11263147 - r11263148;
return r11263149;
}
double f(double x, double eps) {
double r11263150 = eps;
double r11263151 = -1.2067536048493133e-08;
bool r11263152 = r11263150 <= r11263151;
double r11263153 = x;
double r11263154 = sin(r11263153);
double r11263155 = cos(r11263150);
double r11263156 = r11263154 * r11263155;
double r11263157 = cos(r11263153);
double r11263158 = sin(r11263150);
double r11263159 = r11263157 * r11263158;
double r11263160 = r11263156 + r11263159;
double r11263161 = r11263160 - r11263154;
double r11263162 = 6.162253177009699e-09;
bool r11263163 = r11263150 <= r11263162;
double r11263164 = 2.0;
double r11263165 = r11263150 / r11263164;
double r11263166 = sin(r11263165);
double r11263167 = r11263153 + r11263150;
double r11263168 = r11263167 + r11263153;
double r11263169 = r11263168 / r11263164;
double r11263170 = cos(r11263169);
double r11263171 = r11263166 * r11263170;
double r11263172 = r11263164 * r11263171;
double r11263173 = r11263163 ? r11263172 : r11263161;
double r11263174 = r11263152 ? r11263161 : r11263173;
return r11263174;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.5 |
| Herbie | 0.4 |
if eps < -1.2067536048493133e-08 or 6.162253177009699e-09 < eps Initial program 30.1
rmApplied sin-sum0.6
if -1.2067536048493133e-08 < eps < 6.162253177009699e-09Initial program 44.7
rmApplied diff-sin44.7
Simplified0.3
Final simplification0.4
herbie shell --seed 2019124
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))