\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.5708003209900752 \cdot 10^{-39}:\\
\;\;\;\;\frac{\cos x \cdot \left(\tan \varepsilon + \tan x\right) - \left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \sin x}{\left(1 - \tan x \cdot \tan \varepsilon\right) \cdot \cos x}\\
\mathbf{elif}\;\varepsilon \le 2.1362146683792668 \cdot 10^{-54}:\\
\;\;\;\;\left(x \cdot x + x \cdot \varepsilon\right) \cdot \varepsilon + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \frac{\tan x \cdot \sin \varepsilon}{\cos \varepsilon}} \cdot \left(\tan x \cdot \tan \varepsilon + 1\right) - \tan x\\
\end{array}double f(double x, double eps) {
double r2974234 = x;
double r2974235 = eps;
double r2974236 = r2974234 + r2974235;
double r2974237 = tan(r2974236);
double r2974238 = tan(r2974234);
double r2974239 = r2974237 - r2974238;
return r2974239;
}
double f(double x, double eps) {
double r2974240 = eps;
double r2974241 = -2.5708003209900752e-39;
bool r2974242 = r2974240 <= r2974241;
double r2974243 = x;
double r2974244 = cos(r2974243);
double r2974245 = tan(r2974240);
double r2974246 = tan(r2974243);
double r2974247 = r2974245 + r2974246;
double r2974248 = r2974244 * r2974247;
double r2974249 = 1.0;
double r2974250 = r2974246 * r2974245;
double r2974251 = r2974249 - r2974250;
double r2974252 = sin(r2974243);
double r2974253 = r2974251 * r2974252;
double r2974254 = r2974248 - r2974253;
double r2974255 = r2974251 * r2974244;
double r2974256 = r2974254 / r2974255;
double r2974257 = 2.1362146683792668e-54;
bool r2974258 = r2974240 <= r2974257;
double r2974259 = r2974243 * r2974243;
double r2974260 = r2974243 * r2974240;
double r2974261 = r2974259 + r2974260;
double r2974262 = r2974261 * r2974240;
double r2974263 = r2974262 + r2974240;
double r2974264 = sin(r2974240);
double r2974265 = r2974246 * r2974264;
double r2974266 = cos(r2974240);
double r2974267 = r2974265 / r2974266;
double r2974268 = r2974250 * r2974267;
double r2974269 = r2974249 - r2974268;
double r2974270 = r2974247 / r2974269;
double r2974271 = r2974250 + r2974249;
double r2974272 = r2974270 * r2974271;
double r2974273 = r2974272 - r2974246;
double r2974274 = r2974258 ? r2974263 : r2974273;
double r2974275 = r2974242 ? r2974256 : r2974274;
return r2974275;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.8 |
|---|---|
| Target | 14.8 |
| Herbie | 15.1 |
if eps < -2.5708003209900752e-39Initial program 29.5
rmApplied tan-quot29.4
Applied tan-sum3.1
Applied frac-sub3.1
if -2.5708003209900752e-39 < eps < 2.1362146683792668e-54Initial program 46.5
rmApplied tan-sum46.5
Taylor expanded around 0 30.4
Simplified30.4
if 2.1362146683792668e-54 < eps Initial program 29.8
rmApplied tan-sum4.4
rmApplied flip--4.5
Applied associate-/r/4.5
rmApplied tan-quot4.5
Applied associate-*r/4.5
Final simplification15.1
herbie shell --seed 2019138
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))