\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sqrt[3]{\left(\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x\right) \cdot \left(\left(\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x\right) \cdot \left(\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x\right)\right)}}{\cos x}} + \mathsf{fma}\left(\frac{\sin x}{\cos x}, \frac{1}{1 - \frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x}{\cos x}}, \frac{-\sin x}{\cos x}\right)double f(double x, double eps) {
double r2457657 = x;
double r2457658 = eps;
double r2457659 = r2457657 + r2457658;
double r2457660 = tan(r2457659);
double r2457661 = tan(r2457657);
double r2457662 = r2457660 - r2457661;
return r2457662;
}
double f(double x, double eps) {
double r2457663 = eps;
double r2457664 = sin(r2457663);
double r2457665 = cos(r2457663);
double r2457666 = r2457664 / r2457665;
double r2457667 = 1.0;
double r2457668 = x;
double r2457669 = sin(r2457668);
double r2457670 = r2457666 * r2457669;
double r2457671 = r2457670 * r2457670;
double r2457672 = r2457670 * r2457671;
double r2457673 = cbrt(r2457672);
double r2457674 = cos(r2457668);
double r2457675 = r2457673 / r2457674;
double r2457676 = r2457667 - r2457675;
double r2457677 = r2457666 / r2457676;
double r2457678 = r2457669 / r2457674;
double r2457679 = r2457670 / r2457674;
double r2457680 = r2457667 - r2457679;
double r2457681 = r2457667 / r2457680;
double r2457682 = -r2457669;
double r2457683 = r2457682 / r2457674;
double r2457684 = fma(r2457678, r2457681, r2457683);
double r2457685 = r2457677 + r2457684;
return r2457685;
}




Bits error versus x




Bits error versus eps
| Original | 36.6 |
|---|---|
| Target | 14.6 |
| Herbie | 12.9 |
Initial program 36.6
rmApplied tan-sum22.0
Taylor expanded around inf 22.1
Simplified12.9
rmApplied add-cbrt-cube12.9
rmApplied div-inv12.9
Applied fma-neg12.9
Final simplification12.9
herbie shell --seed 2019156 +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)))