\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.035403109286184130586353726641947804415 \cdot 10^{-76}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \frac{\left(\sin x \cdot \sin \varepsilon\right) \cdot \left(\sin x \cdot \tan \varepsilon\right)}{\left(\cos x \cdot \cos \varepsilon\right) \cdot \cos x} \cdot \left(\tan x \cdot \tan \varepsilon\right)} \cdot \left(1 + \left(\tan x \cdot \tan \varepsilon + \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right)\right) - \tan x\\
\mathbf{elif}\;\varepsilon \le 3.290261811358081045825245977755062406771 \cdot 10^{-26}:\\
\;\;\;\;\varepsilon + \varepsilon \cdot \left(x \cdot \left(\varepsilon + x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\tan x + \tan \varepsilon}{1 - \frac{\left(\sin x \cdot \sin \varepsilon\right) \cdot \left(\sin x \cdot \tan \varepsilon\right)}{\left(\cos x \cdot \cos \varepsilon\right) \cdot \cos x} \cdot \left(\tan x \cdot \tan \varepsilon\right)} \cdot \left(1 + \left(\tan x \cdot \tan \varepsilon + \left(\tan x \cdot \tan \varepsilon\right) \cdot \left(\tan x \cdot \tan \varepsilon\right)\right)\right) - \tan x\\
\end{array}double f(double x, double eps) {
double r8750522 = x;
double r8750523 = eps;
double r8750524 = r8750522 + r8750523;
double r8750525 = tan(r8750524);
double r8750526 = tan(r8750522);
double r8750527 = r8750525 - r8750526;
return r8750527;
}
double f(double x, double eps) {
double r8750528 = eps;
double r8750529 = -1.0354031092861841e-76;
bool r8750530 = r8750528 <= r8750529;
double r8750531 = x;
double r8750532 = tan(r8750531);
double r8750533 = tan(r8750528);
double r8750534 = r8750532 + r8750533;
double r8750535 = 1.0;
double r8750536 = sin(r8750531);
double r8750537 = sin(r8750528);
double r8750538 = r8750536 * r8750537;
double r8750539 = r8750536 * r8750533;
double r8750540 = r8750538 * r8750539;
double r8750541 = cos(r8750531);
double r8750542 = cos(r8750528);
double r8750543 = r8750541 * r8750542;
double r8750544 = r8750543 * r8750541;
double r8750545 = r8750540 / r8750544;
double r8750546 = r8750532 * r8750533;
double r8750547 = r8750545 * r8750546;
double r8750548 = r8750535 - r8750547;
double r8750549 = r8750534 / r8750548;
double r8750550 = r8750546 * r8750546;
double r8750551 = r8750546 + r8750550;
double r8750552 = r8750535 + r8750551;
double r8750553 = r8750549 * r8750552;
double r8750554 = r8750553 - r8750532;
double r8750555 = 3.290261811358081e-26;
bool r8750556 = r8750528 <= r8750555;
double r8750557 = r8750528 + r8750531;
double r8750558 = r8750531 * r8750557;
double r8750559 = r8750528 * r8750558;
double r8750560 = r8750528 + r8750559;
double r8750561 = r8750556 ? r8750560 : r8750554;
double r8750562 = r8750530 ? r8750554 : r8750561;
return r8750562;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.3 |
| Herbie | 15.6 |
if eps < -1.0354031092861841e-76 or 3.290261811358081e-26 < eps Initial program 30.2
rmApplied tan-sum4.2
rmApplied flip3--4.3
Applied associate-/r/4.3
Simplified4.3
rmApplied tan-quot4.3
Applied associate-*l/4.3
Applied tan-quot4.3
Applied tan-quot4.3
Applied frac-times4.3
Applied frac-times4.3
if -1.0354031092861841e-76 < eps < 3.290261811358081e-26Initial program 46.5
Taylor expanded around 0 32.0
Simplified32.0
Final simplification15.6
herbie shell --seed 2019174
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))