\tan \left(x + \varepsilon\right) - \tan x
\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\frac{\sin \varepsilon}{\cos \varepsilon} \cdot \sin x}{\cos x}} + \mathsf{fma}\left(\frac{\sin x}{\cos x}, \frac{1}{1 - \frac{\frac{\sin x}{\sqrt[3]{\cos \varepsilon} \cdot \sqrt[3]{\cos \varepsilon}} \cdot \frac{\sin \varepsilon}{\sqrt[3]{\cos \varepsilon}}}{\cos x}}, \frac{-\sin x}{\cos x}\right)double f(double x, double eps) {
double r1868118 = x;
double r1868119 = eps;
double r1868120 = r1868118 + r1868119;
double r1868121 = tan(r1868120);
double r1868122 = tan(r1868118);
double r1868123 = r1868121 - r1868122;
return r1868123;
}
double f(double x, double eps) {
double r1868124 = eps;
double r1868125 = sin(r1868124);
double r1868126 = cos(r1868124);
double r1868127 = r1868125 / r1868126;
double r1868128 = 1.0;
double r1868129 = x;
double r1868130 = sin(r1868129);
double r1868131 = r1868127 * r1868130;
double r1868132 = cos(r1868129);
double r1868133 = r1868131 / r1868132;
double r1868134 = r1868128 - r1868133;
double r1868135 = r1868127 / r1868134;
double r1868136 = r1868130 / r1868132;
double r1868137 = cbrt(r1868126);
double r1868138 = r1868137 * r1868137;
double r1868139 = r1868130 / r1868138;
double r1868140 = r1868125 / r1868137;
double r1868141 = r1868139 * r1868140;
double r1868142 = r1868141 / r1868132;
double r1868143 = r1868128 - r1868142;
double r1868144 = r1868128 / r1868143;
double r1868145 = -r1868130;
double r1868146 = r1868145 / r1868132;
double r1868147 = fma(r1868136, r1868144, r1868146);
double r1868148 = r1868135 + r1868147;
return r1868148;
}




Bits error versus x




Bits error versus eps
| Original | 37.0 |
|---|---|
| Target | 14.8 |
| Herbie | 13.2 |
Initial program 37.0
rmApplied tan-sum22.2
Taylor expanded around inf 22.3
Simplified13.1
rmApplied div-inv13.1
Applied fma-neg13.1
rmApplied add-cube-cbrt13.2
Applied *-un-lft-identity13.2
Applied times-frac13.2
Applied associate-*r*13.2
Simplified13.2
Final simplification13.2
herbie shell --seed 2019154 +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)))