\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon}{\cos \varepsilon} \cdot \frac{\sin x}{\cos x}} - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r4797012 = x;
double r4797013 = eps;
double r4797014 = r4797012 + r4797013;
double r4797015 = tan(r4797014);
double r4797016 = tan(r4797012);
double r4797017 = r4797015 - r4797016;
return r4797017;
}
double f(double x, double eps) {
double r4797018 = eps;
double r4797019 = sin(r4797018);
double r4797020 = cos(r4797018);
double r4797021 = r4797019 / r4797020;
double r4797022 = 1.0;
double r4797023 = x;
double r4797024 = sin(r4797023);
double r4797025 = r4797024 * r4797019;
double r4797026 = cos(r4797023);
double r4797027 = r4797020 * r4797026;
double r4797028 = r4797025 / r4797027;
double r4797029 = r4797022 - r4797028;
double r4797030 = r4797021 / r4797029;
double r4797031 = r4797024 / r4797026;
double r4797032 = r4797021 * r4797031;
double r4797033 = r4797022 - r4797032;
double r4797034 = r4797031 / r4797033;
double r4797035 = r4797034 - r4797031;
double r4797036 = r4797030 + r4797035;
return r4797036;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.3 |
|---|---|
| Target | 14.7 |
| Herbie | 12.9 |
Initial program 36.3
rmApplied tan-sum21.6
Taylor expanded around inf 21.7
Simplified12.9
rmApplied add-log-exp12.9
Taylor expanded around -inf 12.9
Final simplification12.9
herbie shell --seed 2019134 +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)))