\tan \left(x + \varepsilon\right) - \tan x
\left(\frac{\sin x}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}\right) \cdot \cos x} - \frac{\sin x}{\cos x}\right) + \frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos \varepsilon \cdot \cos x}}double f(double x, double eps) {
double r4789728 = x;
double r4789729 = eps;
double r4789730 = r4789728 + r4789729;
double r4789731 = tan(r4789730);
double r4789732 = tan(r4789728);
double r4789733 = r4789731 - r4789732;
return r4789733;
}
double f(double x, double eps) {
double r4789734 = x;
double r4789735 = sin(r4789734);
double r4789736 = 1.0;
double r4789737 = eps;
double r4789738 = sin(r4789737);
double r4789739 = r4789735 * r4789738;
double r4789740 = cos(r4789737);
double r4789741 = cos(r4789734);
double r4789742 = r4789740 * r4789741;
double r4789743 = r4789739 / r4789742;
double r4789744 = r4789736 - r4789743;
double r4789745 = r4789744 * r4789741;
double r4789746 = r4789735 / r4789745;
double r4789747 = r4789735 / r4789741;
double r4789748 = r4789746 - r4789747;
double r4789749 = r4789738 / r4789740;
double r4789750 = r4789749 / r4789744;
double r4789751 = r4789748 + r4789750;
return r4789751;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.1 |
| Herbie | 12.8 |
Initial program 36.9
rmApplied tan-sum21.8
Taylor expanded around -inf 21.9
Simplified12.8
rmApplied add-cbrt-cube12.8
Applied add-cbrt-cube12.8
Applied cbrt-unprod12.8
Simplified12.8
Taylor expanded around -inf 12.8
Final simplification12.8
herbie shell --seed 2019144
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))