\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.124833377187032 \cdot 10^{-09}:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - {\left(\tan x \cdot \tan \varepsilon\right)}^{3}}\right), \left(\left(\left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right) + \tan x \cdot \tan \varepsilon\right) + 1\right), \left(-\tan x\right)\right)\\
\mathbf{elif}\;\varepsilon \le 3.884792287835392 \cdot 10^{-09}:\\
\;\;\;\;\left(\tan x - \tan x\right) + \mathsf{fma}\left(\left(\frac{\tan \varepsilon + \tan x}{1 - \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)}\right), \left(\tan x \cdot \tan \varepsilon\right), \left(\mathsf{fma}\left(\frac{2}{15}, \left({\varepsilon}^{5}\right), \left(\mathsf{fma}\left(\left(\varepsilon \cdot \varepsilon\right), \left(\varepsilon \cdot \frac{1}{3}\right), \varepsilon\right)\right)\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\tan x \cdot \tan x - \tan \varepsilon \cdot \tan \varepsilon}{\left(\tan x - \tan \varepsilon\right) - \tan x \cdot \left(\tan \varepsilon \cdot \left(\tan x - \tan \varepsilon\right)\right)} - \tan x\\
\end{array}double f(double x, double eps) {
double r18928285 = x;
double r18928286 = eps;
double r18928287 = r18928285 + r18928286;
double r18928288 = tan(r18928287);
double r18928289 = tan(r18928285);
double r18928290 = r18928288 - r18928289;
return r18928290;
}
double f(double x, double eps) {
double r18928291 = eps;
double r18928292 = -8.124833377187032e-09;
bool r18928293 = r18928291 <= r18928292;
double r18928294 = tan(r18928291);
double r18928295 = x;
double r18928296 = tan(r18928295);
double r18928297 = r18928294 + r18928296;
double r18928298 = 1.0;
double r18928299 = r18928296 * r18928294;
double r18928300 = 3.0;
double r18928301 = pow(r18928299, r18928300);
double r18928302 = r18928298 - r18928301;
double r18928303 = r18928297 / r18928302;
double r18928304 = r18928299 * r18928299;
double r18928305 = r18928304 + r18928299;
double r18928306 = r18928305 + r18928298;
double r18928307 = -r18928296;
double r18928308 = fma(r18928303, r18928306, r18928307);
double r18928309 = 3.884792287835392e-09;
bool r18928310 = r18928291 <= r18928309;
double r18928311 = r18928296 - r18928296;
double r18928312 = r18928298 - r18928304;
double r18928313 = r18928297 / r18928312;
double r18928314 = 0.13333333333333333;
double r18928315 = 5.0;
double r18928316 = pow(r18928291, r18928315);
double r18928317 = r18928291 * r18928291;
double r18928318 = 0.3333333333333333;
double r18928319 = r18928291 * r18928318;
double r18928320 = fma(r18928317, r18928319, r18928291);
double r18928321 = fma(r18928314, r18928316, r18928320);
double r18928322 = fma(r18928313, r18928299, r18928321);
double r18928323 = r18928311 + r18928322;
double r18928324 = r18928296 * r18928296;
double r18928325 = r18928294 * r18928294;
double r18928326 = r18928324 - r18928325;
double r18928327 = r18928296 - r18928294;
double r18928328 = r18928294 * r18928327;
double r18928329 = r18928296 * r18928328;
double r18928330 = r18928327 - r18928329;
double r18928331 = r18928326 / r18928330;
double r18928332 = r18928331 - r18928296;
double r18928333 = r18928310 ? r18928323 : r18928332;
double r18928334 = r18928293 ? r18928308 : r18928333;
return r18928334;
}




Bits error versus x




Bits error versus eps
| Original | 37.2 |
|---|---|
| Target | 14.6 |
| Herbie | 0.4 |
if eps < -8.124833377187032e-09Initial program 29.4
rmApplied tan-sum0.5
rmApplied flip3--0.5
Applied associate-/r/0.5
Applied fma-neg0.5
if -8.124833377187032e-09 < eps < 3.884792287835392e-09Initial program 44.8
rmApplied tan-sum44.4
rmApplied *-un-lft-identity44.4
Applied flip--44.4
Applied associate-/r/44.4
Applied prod-diff44.4
Simplified39.9
Simplified39.9
Taylor expanded around 0 0.3
Simplified0.3
if 3.884792287835392e-09 < eps Initial program 29.6
rmApplied tan-sum0.5
rmApplied flip-+0.6
Applied associate-/l/0.6
Simplified0.6
Final simplification0.4
herbie shell --seed 2019125 +o rules:numerics
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))