\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.411031888842386686832542331338415511525 \cdot 10^{-53}:\\
\;\;\;\;\frac{\cos x \cdot \left(\tan \varepsilon + \tan x\right) - \sin x \cdot \left(1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}\right)}{\left(1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}\right) \cdot \cos x}\\
\mathbf{elif}\;\varepsilon \le 8.988728992921953113303178437386507341613 \cdot 10^{-40}:\\
\;\;\;\;\frac{1}{3} \cdot \left(\varepsilon \cdot \left(\varepsilon \cdot \varepsilon\right)\right) + \left(\varepsilon \cdot \left(x \cdot \varepsilon\right) + \varepsilon\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\cos x \cdot \left(\tan \varepsilon + \tan x\right) - \sin x \cdot \left(1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}\right)}{\left(1 - \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}\right) \cdot \cos x}\\
\end{array}double f(double x, double eps) {
double r6160149 = x;
double r6160150 = eps;
double r6160151 = r6160149 + r6160150;
double r6160152 = tan(r6160151);
double r6160153 = tan(r6160149);
double r6160154 = r6160152 - r6160153;
return r6160154;
}
double f(double x, double eps) {
double r6160155 = eps;
double r6160156 = -1.4110318888423867e-53;
bool r6160157 = r6160155 <= r6160156;
double r6160158 = x;
double r6160159 = cos(r6160158);
double r6160160 = tan(r6160155);
double r6160161 = tan(r6160158);
double r6160162 = r6160160 + r6160161;
double r6160163 = r6160159 * r6160162;
double r6160164 = sin(r6160158);
double r6160165 = 1.0;
double r6160166 = sin(r6160155);
double r6160167 = r6160161 * r6160166;
double r6160168 = cos(r6160155);
double r6160169 = r6160167 / r6160168;
double r6160170 = r6160165 - r6160169;
double r6160171 = r6160164 * r6160170;
double r6160172 = r6160163 - r6160171;
double r6160173 = r6160170 * r6160159;
double r6160174 = r6160172 / r6160173;
double r6160175 = 8.988728992921953e-40;
bool r6160176 = r6160155 <= r6160175;
double r6160177 = 0.3333333333333333;
double r6160178 = r6160155 * r6160155;
double r6160179 = r6160155 * r6160178;
double r6160180 = r6160177 * r6160179;
double r6160181 = r6160158 * r6160155;
double r6160182 = r6160155 * r6160181;
double r6160183 = r6160182 + r6160155;
double r6160184 = r6160180 + r6160183;
double r6160185 = r6160176 ? r6160184 : r6160174;
double r6160186 = r6160157 ? r6160174 : r6160185;
return r6160186;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 15.1 |
| Herbie | 14.4 |
if eps < -1.4110318888423867e-53 or 8.988728992921953e-40 < eps Initial program 30.1
rmApplied tan-sum3.9
rmApplied tan-quot3.9
Applied associate-*r/3.9
rmApplied tan-quot3.9
Applied frac-sub3.9
if -1.4110318888423867e-53 < eps < 8.988728992921953e-40Initial program 46.4
rmApplied tan-sum46.4
rmApplied tan-quot46.4
Applied associate-*r/46.4
rmApplied flip3--46.4
Applied associate-/r/46.4
Simplified46.4
Taylor expanded around 0 28.1
Simplified28.7
Final simplification14.4
herbie shell --seed 2019170
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))