\tan \left(x + \varepsilon\right) - \tan x
\left(\mathsf{fma}\left(\frac{\sin x}{{\left(\cos \varepsilon\right)}^{2}}, \frac{{\left(\sin \varepsilon\right)}^{2}}{\left(1 - \frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{2}}{{\left(\cos x\right)}^{2} \cdot {\left(\cos \varepsilon\right)}^{2}}\right) \cdot \cos x}, \left(\frac{{\left(\sin x\right)}^{2}}{{\left(\cos x\right)}^{2}} + 1\right) \cdot \frac{\sin \varepsilon}{\left(1 - \frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{2}}{{\left(\cos x\right)}^{2} \cdot {\left(\cos \varepsilon\right)}^{2}}\right) \cdot \cos \varepsilon}\right) + \left(\frac{\sin x}{\left(1 - \frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{2}}{{\left(\cos x\right)}^{2} \cdot {\left(\cos \varepsilon\right)}^{2}}\right) \cdot \cos x} - \frac{\sin x}{\cos x}\right)\right) + \tan x \cdot 0double f(double x, double eps) {
double r132240 = x;
double r132241 = eps;
double r132242 = r132240 + r132241;
double r132243 = tan(r132242);
double r132244 = tan(r132240);
double r132245 = r132243 - r132244;
return r132245;
}
double f(double x, double eps) {
double r132246 = x;
double r132247 = sin(r132246);
double r132248 = eps;
double r132249 = cos(r132248);
double r132250 = 2.0;
double r132251 = pow(r132249, r132250);
double r132252 = r132247 / r132251;
double r132253 = sin(r132248);
double r132254 = pow(r132253, r132250);
double r132255 = 1.0;
double r132256 = pow(r132247, r132250);
double r132257 = r132256 * r132254;
double r132258 = cos(r132246);
double r132259 = pow(r132258, r132250);
double r132260 = r132259 * r132251;
double r132261 = r132257 / r132260;
double r132262 = r132255 - r132261;
double r132263 = r132262 * r132258;
double r132264 = r132254 / r132263;
double r132265 = r132256 / r132259;
double r132266 = r132265 + r132255;
double r132267 = r132262 * r132249;
double r132268 = r132253 / r132267;
double r132269 = r132266 * r132268;
double r132270 = fma(r132252, r132264, r132269);
double r132271 = r132247 / r132263;
double r132272 = r132247 / r132258;
double r132273 = r132271 - r132272;
double r132274 = r132270 + r132273;
double r132275 = tan(r132246);
double r132276 = 0.0;
double r132277 = r132275 * r132276;
double r132278 = r132274 + r132277;
return r132278;
}




Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 15.1 |
| Herbie | 0.6 |
Initial program 37.1
rmApplied tan-sum21.9
rmApplied add-cube-cbrt22.4
Applied flip--22.4
Applied associate-/r/22.4
Applied prod-diff22.5
Simplified22.3
Simplified21.9
Taylor expanded around inf 22.1
Simplified0.6
Final simplification0.6
herbie shell --seed 2020042 +o rules:numerics
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:precision binary64
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))