\tan \left(x + \varepsilon\right) - \tan x
\mathsf{fma}\left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\frac{\sin x \cdot \sin \varepsilon}{\cos x}}{\cos \varepsilon} \cdot \frac{\frac{\sin x \cdot \sin \varepsilon}{\cos x}}{\cos \varepsilon}}, 1 + \frac{\frac{\sin x \cdot \sin \varepsilon}{\cos x}}{\cos \varepsilon}, -\frac{\sin x}{\cos x}\right) + \frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}double f(double x, double eps) {
double r128797 = x;
double r128798 = eps;
double r128799 = r128797 + r128798;
double r128800 = tan(r128799);
double r128801 = tan(r128797);
double r128802 = r128800 - r128801;
return r128802;
}
double f(double x, double eps) {
double r128803 = x;
double r128804 = sin(r128803);
double r128805 = cos(r128803);
double r128806 = r128804 / r128805;
double r128807 = 1.0;
double r128808 = eps;
double r128809 = sin(r128808);
double r128810 = r128804 * r128809;
double r128811 = r128810 / r128805;
double r128812 = cos(r128808);
double r128813 = r128811 / r128812;
double r128814 = r128813 * r128813;
double r128815 = r128807 - r128814;
double r128816 = r128806 / r128815;
double r128817 = r128807 + r128813;
double r128818 = -r128806;
double r128819 = fma(r128816, r128817, r128818);
double r128820 = r128809 / r128812;
double r128821 = r128805 * r128812;
double r128822 = r128810 / r128821;
double r128823 = r128807 - r128822;
double r128824 = r128820 / r128823;
double r128825 = r128819 + r128824;
return r128825;
}




Bits error versus x




Bits error versus eps
| Original | 37.2 |
|---|---|
| Target | 15.0 |
| Herbie | 13.1 |
Initial program 37.2
Simplified37.2
rmApplied tan-sum22.2
Simplified22.2
Taylor expanded around inf 22.3
Simplified13.1
rmApplied associate-/r*13.1
Simplified13.1
rmApplied flip--13.1
Applied associate-/r/13.1
Applied fma-neg13.1
Simplified13.1
Final simplification13.1
herbie shell --seed 2019196 +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)))