\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.2876559687607358 \cdot 10^{-55}:\\
\;\;\;\;\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 3.284187801653348 \cdot 10^{-34}:\\
\;\;\;\;\varepsilon + \left(\varepsilon \cdot \left(x + \varepsilon\right)\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\tan x \cdot \tan x\right) \cdot \tan x + \tan \varepsilon \cdot \left(\tan \varepsilon \cdot \tan \varepsilon\right)}{\left(\left(\tan \varepsilon \cdot \tan \varepsilon - \tan x \cdot \tan \varepsilon\right) + \tan x \cdot \tan x\right) \cdot \left(1 - \tan x \cdot \tan \varepsilon\right)} - \tan x\\
\end{array}double f(double x, double eps) {
double r8740065 = x;
double r8740066 = eps;
double r8740067 = r8740065 + r8740066;
double r8740068 = tan(r8740067);
double r8740069 = tan(r8740065);
double r8740070 = r8740068 - r8740069;
return r8740070;
}
double f(double x, double eps) {
double r8740071 = eps;
double r8740072 = -1.2876559687607358e-55;
bool r8740073 = r8740071 <= r8740072;
double r8740074 = x;
double r8740075 = cos(r8740074);
double r8740076 = tan(r8740071);
double r8740077 = tan(r8740074);
double r8740078 = r8740076 + r8740077;
double r8740079 = r8740075 * r8740078;
double r8740080 = 1.0;
double r8740081 = r8740077 * r8740076;
double r8740082 = r8740080 - r8740081;
double r8740083 = sin(r8740074);
double r8740084 = r8740082 * r8740083;
double r8740085 = r8740079 - r8740084;
double r8740086 = r8740082 * r8740075;
double r8740087 = r8740085 / r8740086;
double r8740088 = 3.284187801653348e-34;
bool r8740089 = r8740071 <= r8740088;
double r8740090 = r8740074 + r8740071;
double r8740091 = r8740071 * r8740090;
double r8740092 = r8740091 * r8740074;
double r8740093 = r8740071 + r8740092;
double r8740094 = r8740077 * r8740077;
double r8740095 = r8740094 * r8740077;
double r8740096 = r8740076 * r8740076;
double r8740097 = r8740076 * r8740096;
double r8740098 = r8740095 + r8740097;
double r8740099 = r8740096 - r8740081;
double r8740100 = r8740099 + r8740094;
double r8740101 = r8740100 * r8740082;
double r8740102 = r8740098 / r8740101;
double r8740103 = r8740102 - r8740077;
double r8740104 = r8740089 ? r8740093 : r8740103;
double r8740105 = r8740073 ? r8740087 : r8740104;
return r8740105;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.2 |
| Herbie | 15.5 |
if eps < -1.2876559687607358e-55Initial program 30.8
rmApplied tan-quot30.6
Applied tan-sum4.3
Applied frac-sub4.4
if -1.2876559687607358e-55 < eps < 3.284187801653348e-34Initial program 46.5
rmApplied tan-sum46.5
Taylor expanded around 0 31.7
Simplified31.7
if 3.284187801653348e-34 < eps Initial program 29.2
rmApplied tan-sum2.2
rmApplied flip3-+2.4
Applied associate-/l/2.4
Simplified2.3
Final simplification15.5
herbie shell --seed 2019121
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))