\tan \left(x + \varepsilon\right) - \tan x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.821283658645314156687993332074134483423 \cdot 10^{-93}:\\
\;\;\;\;\frac{\frac{\frac{\tan x + \tan \varepsilon}{\log \left(e^{1 - \tan x \cdot \tan \varepsilon}\right)} \cdot \left(\tan x + \tan \varepsilon\right)}{1 - \tan x \cdot \tan \varepsilon} + \left(-\tan x \cdot \tan x\right)}{\frac{\tan x + \tan \varepsilon}{\log \left(e^{1 - \tan x \cdot \tan \varepsilon}\right)} + \tan x}\\
\mathbf{elif}\;\varepsilon \le 5.540253431343870974412281715276917814538 \cdot 10^{-28}:\\
\;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon} \cdot \frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon} - \tan x \cdot \tan x}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon} + \tan x}\\
\end{array}double f(double x, double eps) {
double r146117 = x;
double r146118 = eps;
double r146119 = r146117 + r146118;
double r146120 = tan(r146119);
double r146121 = tan(r146117);
double r146122 = r146120 - r146121;
return r146122;
}
double f(double x, double eps) {
double r146123 = eps;
double r146124 = -3.821283658645314e-93;
bool r146125 = r146123 <= r146124;
double r146126 = x;
double r146127 = tan(r146126);
double r146128 = tan(r146123);
double r146129 = r146127 + r146128;
double r146130 = 1.0;
double r146131 = r146127 * r146128;
double r146132 = r146130 - r146131;
double r146133 = exp(r146132);
double r146134 = log(r146133);
double r146135 = r146129 / r146134;
double r146136 = r146135 * r146129;
double r146137 = r146136 / r146132;
double r146138 = r146127 * r146127;
double r146139 = -r146138;
double r146140 = r146137 + r146139;
double r146141 = r146135 + r146127;
double r146142 = r146140 / r146141;
double r146143 = 5.540253431343871e-28;
bool r146144 = r146123 <= r146143;
double r146145 = r146126 * r146123;
double r146146 = r146123 + r146126;
double r146147 = r146145 * r146146;
double r146148 = r146147 + r146123;
double r146149 = r146129 / r146132;
double r146150 = r146149 * r146149;
double r146151 = r146150 - r146138;
double r146152 = r146149 + r146127;
double r146153 = r146151 / r146152;
double r146154 = r146144 ? r146148 : r146153;
double r146155 = r146125 ? r146142 : r146154;
return r146155;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.2 |
|---|---|
| Target | 15.1 |
| Herbie | 15.8 |
if eps < -3.821283658645314e-93Initial program 30.5
rmApplied tan-sum7.6
rmApplied add-log-exp7.7
Applied add-log-exp7.7
Applied diff-log7.8
Simplified7.7
rmApplied flip--7.8
Simplified7.8
if -3.821283658645314e-93 < eps < 5.540253431343871e-28Initial program 47.4
rmApplied tan-sum47.4
Taylor expanded around 0 31.9
Simplified31.7
if 5.540253431343871e-28 < eps Initial program 30.0
rmApplied tan-sum1.9
rmApplied flip--2.1
Final simplification15.8
herbie shell --seed 2019318
(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)))