\tan \left(x + \varepsilon\right) - \tan x
\sqrt[3]{\left(\mathsf{fma}\left(\frac{\sin x}{\cos x}, \frac{1}{\mathsf{fma}\left(-\frac{\sin x}{\cos x}, \frac{\sin \varepsilon}{\cos \varepsilon}, 1\right)}, -\frac{\sin x}{\cos x}\right) \cdot \left(\frac{\frac{\sin x}{\cos x}}{\mathsf{fma}\left(-\frac{\sin x}{\cos x}, \frac{\sin \varepsilon}{\cos \varepsilon}, 1\right)} + \left(-\frac{\sin x}{\cos x}\right)\right)\right) \cdot \left(\frac{\frac{\sin x}{\cos x}}{\mathsf{fma}\left(-\frac{\sin x}{\cos x}, \frac{\sin \varepsilon}{\cos \varepsilon}, 1\right)} + \left(-\frac{\sin x}{\cos x}\right)\right)} + \frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{\mathsf{fma}\left(-\frac{\sin x}{\cos x}, \frac{\sin \varepsilon}{\cos \varepsilon}, 1\right)}double f(double x, double eps) {
double r4298780 = x;
double r4298781 = eps;
double r4298782 = r4298780 + r4298781;
double r4298783 = tan(r4298782);
double r4298784 = tan(r4298780);
double r4298785 = r4298783 - r4298784;
return r4298785;
}
double f(double x, double eps) {
double r4298786 = x;
double r4298787 = sin(r4298786);
double r4298788 = cos(r4298786);
double r4298789 = r4298787 / r4298788;
double r4298790 = 1.0;
double r4298791 = -r4298789;
double r4298792 = eps;
double r4298793 = sin(r4298792);
double r4298794 = cos(r4298792);
double r4298795 = r4298793 / r4298794;
double r4298796 = fma(r4298791, r4298795, r4298790);
double r4298797 = r4298790 / r4298796;
double r4298798 = fma(r4298789, r4298797, r4298791);
double r4298799 = r4298789 / r4298796;
double r4298800 = r4298799 + r4298791;
double r4298801 = r4298798 * r4298800;
double r4298802 = r4298801 * r4298800;
double r4298803 = cbrt(r4298802);
double r4298804 = r4298795 / r4298796;
double r4298805 = r4298803 + r4298804;
return r4298805;
}




Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 15.1 |
| Herbie | 12.9 |
Initial program 37.1
rmApplied tan-sum21.9
Taylor expanded around inf 22.0
Simplified12.9
rmApplied add-cbrt-cube12.9
rmApplied div-inv12.9
Applied fma-def12.9
Final simplification12.9
herbie shell --seed 2019171 +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)))