\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 r130528 = x;
double r130529 = eps;
double r130530 = r130528 + r130529;
double r130531 = tan(r130530);
double r130532 = tan(r130528);
double r130533 = r130531 - r130532;
return r130533;
}
double f(double x, double eps) {
double r130534 = x;
double r130535 = sin(r130534);
double r130536 = eps;
double r130537 = cos(r130536);
double r130538 = 2.0;
double r130539 = pow(r130537, r130538);
double r130540 = r130535 / r130539;
double r130541 = sin(r130536);
double r130542 = pow(r130541, r130538);
double r130543 = 1.0;
double r130544 = pow(r130535, r130538);
double r130545 = r130544 * r130542;
double r130546 = cos(r130534);
double r130547 = pow(r130546, r130538);
double r130548 = r130547 * r130539;
double r130549 = r130545 / r130548;
double r130550 = r130543 - r130549;
double r130551 = r130550 * r130546;
double r130552 = r130542 / r130551;
double r130553 = r130544 / r130547;
double r130554 = r130553 + r130543;
double r130555 = r130550 * r130537;
double r130556 = r130541 / r130555;
double r130557 = r130554 * r130556;
double r130558 = fma(r130540, r130552, r130557);
double r130559 = r130535 / r130551;
double r130560 = r130535 / r130546;
double r130561 = r130559 - r130560;
double r130562 = r130558 + r130561;
double r130563 = tan(r130534);
double r130564 = 0.0;
double r130565 = r130563 * r130564;
double r130566 = r130562 + r130565;
return r130566;
}




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)))