\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.14092216320566653 \cdot 10^{-145} \lor \neg \left(\varepsilon \le 1.7108564194720778 \cdot 10^{-75}\right):\\
\;\;\;\;\frac{{\left(\sin x\right)}^{2} \cdot \sin \varepsilon}{\cos \varepsilon \cdot \left({\left(\cos x\right)}^{2} \cdot \left(1 - \frac{{\left(\sin \varepsilon \cdot \sin x\right)}^{3}}{{\left(\cos \varepsilon \cdot \cos x\right)}^{3}}\right)\right)} + \left(\left(\left(\frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{3}}{\left(\left(1 - \frac{{\left(\sin \varepsilon \cdot \sin x\right)}^{3}}{{\left(\cos \varepsilon \cdot \cos x\right)}^{3}}\right) \cdot {\left(\cos \varepsilon\right)}^{3}\right) \cdot {\left(\cos x\right)}^{2}} + \frac{\frac{\sin x}{1 - \frac{{\left(\sin \varepsilon \cdot \sin x\right)}^{3}}{{\left(\cos \varepsilon \cdot \cos x\right)}^{3}}}}{\cos x}\right) + \frac{{\left(\sin \varepsilon\right)}^{2}}{{\left(\cos \varepsilon\right)}^{2} \cdot \left(1 - \frac{{\left(\sin \varepsilon \cdot \sin x\right)}^{3}}{{\left(\cos \varepsilon \cdot \cos x\right)}^{3}}\right)} \cdot \left(\frac{{\left(\sin x\right)}^{3}}{{\left(\cos x\right)}^{3}} + \frac{\sin x}{\cos x}\right)\right) + \left(\frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{{\left(\sin \varepsilon \cdot \sin x\right)}^{3}}{{\left(\cos \varepsilon \cdot \cos x\right)}^{3}}\right)} - \frac{\sin x}{\cos x}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\varepsilon + {\varepsilon}^{2} \cdot \left(x + \varepsilon \cdot \frac{1}{3}\right)\\
\end{array}double f(double x, double eps) {
double r116264 = x;
double r116265 = eps;
double r116266 = r116264 + r116265;
double r116267 = tan(r116266);
double r116268 = tan(r116264);
double r116269 = r116267 - r116268;
return r116269;
}
double f(double x, double eps) {
double r116270 = eps;
double r116271 = -2.1409221632056665e-145;
bool r116272 = r116270 <= r116271;
double r116273 = 1.7108564194720778e-75;
bool r116274 = r116270 <= r116273;
double r116275 = !r116274;
bool r116276 = r116272 || r116275;
double r116277 = x;
double r116278 = sin(r116277);
double r116279 = 2.0;
double r116280 = pow(r116278, r116279);
double r116281 = sin(r116270);
double r116282 = r116280 * r116281;
double r116283 = cos(r116270);
double r116284 = cos(r116277);
double r116285 = pow(r116284, r116279);
double r116286 = 1.0;
double r116287 = r116281 * r116278;
double r116288 = 3.0;
double r116289 = pow(r116287, r116288);
double r116290 = r116283 * r116284;
double r116291 = pow(r116290, r116288);
double r116292 = r116289 / r116291;
double r116293 = r116286 - r116292;
double r116294 = r116285 * r116293;
double r116295 = r116283 * r116294;
double r116296 = r116282 / r116295;
double r116297 = pow(r116281, r116288);
double r116298 = r116280 * r116297;
double r116299 = pow(r116283, r116288);
double r116300 = r116293 * r116299;
double r116301 = r116300 * r116285;
double r116302 = r116298 / r116301;
double r116303 = r116278 / r116293;
double r116304 = r116303 / r116284;
double r116305 = r116302 + r116304;
double r116306 = pow(r116281, r116279);
double r116307 = pow(r116283, r116279);
double r116308 = r116307 * r116293;
double r116309 = r116306 / r116308;
double r116310 = pow(r116278, r116288);
double r116311 = pow(r116284, r116288);
double r116312 = r116310 / r116311;
double r116313 = r116278 / r116284;
double r116314 = r116312 + r116313;
double r116315 = r116309 * r116314;
double r116316 = r116305 + r116315;
double r116317 = r116283 * r116293;
double r116318 = r116281 / r116317;
double r116319 = r116318 - r116313;
double r116320 = r116316 + r116319;
double r116321 = r116296 + r116320;
double r116322 = pow(r116270, r116279);
double r116323 = 0.3333333333333333;
double r116324 = r116270 * r116323;
double r116325 = r116277 + r116324;
double r116326 = r116322 * r116325;
double r116327 = r116270 + r116326;
double r116328 = r116276 ? r116321 : r116327;
return r116328;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.2 |
|---|---|
| Target | 15.4 |
| Herbie | 14.3 |
if eps < -2.1409221632056665e-145 or 1.7108564194720778e-75 < eps Initial program 31.9
rmApplied tan-sum9.4
Simplified9.4
Simplified9.4
rmApplied flip3--9.5
Simplified9.5
Simplified9.5
Taylor expanded around inf 9.6
Simplified8.4
if -2.1409221632056665e-145 < eps < 1.7108564194720778e-75Initial program 49.0
rmApplied tan-sum49.0
Simplified49.0
Simplified49.0
Taylor expanded around 0 27.2
Simplified27.2
Final simplification14.3
herbie shell --seed 2020043
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:precision binary64
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))