\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x}{\cos x}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\log \left(e^{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x}\right)}{\cos x}} - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r6303031 = x;
double r6303032 = eps;
double r6303033 = r6303031 + r6303032;
double r6303034 = tan(r6303033);
double r6303035 = tan(r6303031);
double r6303036 = r6303034 - r6303035;
return r6303036;
}
double f(double x, double eps) {
double r6303037 = eps;
double r6303038 = sin(r6303037);
double r6303039 = cos(r6303037);
double r6303040 = r6303038 / r6303039;
double r6303041 = 1.0;
double r6303042 = x;
double r6303043 = sin(r6303042);
double r6303044 = r6303040 * r6303043;
double r6303045 = cos(r6303042);
double r6303046 = r6303044 / r6303045;
double r6303047 = r6303041 - r6303046;
double r6303048 = r6303040 / r6303047;
double r6303049 = r6303043 / r6303045;
double r6303050 = exp(r6303044);
double r6303051 = log(r6303050);
double r6303052 = r6303051 / r6303045;
double r6303053 = r6303041 - r6303052;
double r6303054 = r6303049 / r6303053;
double r6303055 = r6303054 - r6303049;
double r6303056 = r6303048 + r6303055;
return r6303056;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.8 |
|---|---|
| Target | 15.1 |
| Herbie | 13.0 |
Initial program 36.8
rmApplied tan-sum21.7
Taylor expanded around inf 21.9
Simplified12.9
rmApplied add-log-exp13.0
Final simplification13.0
herbie shell --seed 2019172
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))