\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{\mathsf{fma}\left(-\tan x, \frac{\sin \varepsilon}{\cos \varepsilon}, 1\right)} + \left(\frac{-\sin x}{\cos x} + \frac{\frac{\sin x}{\cos x}}{\mathsf{fma}\left(\frac{-\sin x}{\cos x}, \frac{\sin \varepsilon}{\cos \varepsilon}, 1\right)}\right)double f(double x, double eps) {
double r4944659 = x;
double r4944660 = eps;
double r4944661 = r4944659 + r4944660;
double r4944662 = tan(r4944661);
double r4944663 = tan(r4944659);
double r4944664 = r4944662 - r4944663;
return r4944664;
}
double f(double x, double eps) {
double r4944665 = eps;
double r4944666 = sin(r4944665);
double r4944667 = cos(r4944665);
double r4944668 = r4944666 / r4944667;
double r4944669 = x;
double r4944670 = tan(r4944669);
double r4944671 = -r4944670;
double r4944672 = 1.0;
double r4944673 = fma(r4944671, r4944668, r4944672);
double r4944674 = r4944668 / r4944673;
double r4944675 = sin(r4944669);
double r4944676 = -r4944675;
double r4944677 = cos(r4944669);
double r4944678 = r4944676 / r4944677;
double r4944679 = r4944675 / r4944677;
double r4944680 = fma(r4944678, r4944668, r4944672);
double r4944681 = r4944679 / r4944680;
double r4944682 = r4944678 + r4944681;
double r4944683 = r4944674 + r4944682;
return r4944683;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 15.1 |
| Herbie | 12.6 |
Initial program 36.9
rmApplied tan-sum21.6
Taylor expanded around inf 21.7
Simplified12.6
rmApplied quot-tan12.6
Final simplification12.6
herbie shell --seed 2019192 +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)))