\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.240915274365558 \cdot 10^{-09}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 1.2284365724618488 \cdot 10^{-08}:\\
\;\;\;\;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 r15314124 = x;
double r15314125 = eps;
double r15314126 = r15314124 + r15314125;
double r15314127 = sin(r15314126);
double r15314128 = sin(r15314124);
double r15314129 = r15314127 - r15314128;
return r15314129;
}
double f(double x, double eps) {
double r15314130 = eps;
double r15314131 = -7.240915274365558e-09;
bool r15314132 = r15314130 <= r15314131;
double r15314133 = x;
double r15314134 = sin(r15314133);
double r15314135 = cos(r15314130);
double r15314136 = r15314134 * r15314135;
double r15314137 = cos(r15314133);
double r15314138 = sin(r15314130);
double r15314139 = r15314137 * r15314138;
double r15314140 = r15314136 + r15314139;
double r15314141 = r15314140 - r15314134;
double r15314142 = 1.2284365724618488e-08;
bool r15314143 = r15314130 <= r15314142;
double r15314144 = 2.0;
double r15314145 = r15314130 / r15314144;
double r15314146 = sin(r15314145);
double r15314147 = r15314133 + r15314130;
double r15314148 = r15314147 + r15314133;
double r15314149 = r15314148 / r15314144;
double r15314150 = cos(r15314149);
double r15314151 = r15314146 * r15314150;
double r15314152 = r15314144 * r15314151;
double r15314153 = r15314143 ? r15314152 : r15314141;
double r15314154 = r15314132 ? r15314141 : r15314153;
return r15314154;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.2 |
|---|---|
| Target | 14.5 |
| Herbie | 0.5 |
if eps < -7.240915274365558e-09 or 1.2284365724618488e-08 < eps Initial program 29.6
rmApplied sin-sum0.6
if -7.240915274365558e-09 < eps < 1.2284365724618488e-08Initial program 44.8
rmApplied diff-sin44.8
Simplified0.3
Final simplification0.5
herbie shell --seed 2019125 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))