\tan \left(x + \varepsilon\right) - \tan x
\left(\left(\left(\frac{\sin \varepsilon}{\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot \cos \varepsilon} + \mathsf{fma}\left(\frac{{\left(\sin x\right)}^{2}}{{\left(\cos x\right)}^{2}}, \frac{{\left(\sin \varepsilon\right)}^{3}}{\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot {\left(\cos \varepsilon\right)}^{3}}, \frac{{\left(\sin x\right)}^{2} \cdot \sin \varepsilon}{\cos \varepsilon \cdot \left(\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot {\left(\cos x\right)}^{2}\right)}\right)\right) + \frac{{\left(\sin \varepsilon\right)}^{2}}{\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot {\left(\cos \varepsilon\right)}^{2}} \cdot \left(\frac{\sin x}{\cos x} + \frac{{\left(\sin x\right)}^{3}}{{\left(\cos x\right)}^{3}}\right)\right) + \left(\frac{\sin x}{\left(1 - \frac{{\left(\sin x\right)}^{3} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right) \cdot \cos x} - \frac{\sin x}{\cos x}\right)\right) + \mathsf{fma}\left(-\tan x, 1, \tan x\right)double f(double x, double eps) {
double r132006 = x;
double r132007 = eps;
double r132008 = r132006 + r132007;
double r132009 = tan(r132008);
double r132010 = tan(r132006);
double r132011 = r132009 - r132010;
return r132011;
}
double f(double x, double eps) {
double r132012 = eps;
double r132013 = sin(r132012);
double r132014 = 1.0;
double r132015 = x;
double r132016 = sin(r132015);
double r132017 = 3.0;
double r132018 = pow(r132016, r132017);
double r132019 = pow(r132013, r132017);
double r132020 = r132018 * r132019;
double r132021 = cos(r132015);
double r132022 = pow(r132021, r132017);
double r132023 = cos(r132012);
double r132024 = pow(r132023, r132017);
double r132025 = r132022 * r132024;
double r132026 = r132020 / r132025;
double r132027 = r132014 - r132026;
double r132028 = r132027 * r132023;
double r132029 = r132013 / r132028;
double r132030 = 2.0;
double r132031 = pow(r132016, r132030);
double r132032 = pow(r132021, r132030);
double r132033 = r132031 / r132032;
double r132034 = r132027 * r132024;
double r132035 = r132019 / r132034;
double r132036 = r132031 * r132013;
double r132037 = r132027 * r132032;
double r132038 = r132023 * r132037;
double r132039 = r132036 / r132038;
double r132040 = fma(r132033, r132035, r132039);
double r132041 = r132029 + r132040;
double r132042 = pow(r132013, r132030);
double r132043 = pow(r132023, r132030);
double r132044 = r132027 * r132043;
double r132045 = r132042 / r132044;
double r132046 = r132016 / r132021;
double r132047 = r132018 / r132022;
double r132048 = r132046 + r132047;
double r132049 = r132045 * r132048;
double r132050 = r132041 + r132049;
double r132051 = r132027 * r132021;
double r132052 = r132016 / r132051;
double r132053 = r132052 - r132046;
double r132054 = r132050 + r132053;
double r132055 = tan(r132015);
double r132056 = -r132055;
double r132057 = fma(r132056, r132014, r132055);
double r132058 = r132054 + r132057;
return r132058;
}




Bits error versus x




Bits error versus eps
| Original | 36.7 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 36.7
rmApplied tan-sum21.4
rmApplied add-cube-cbrt22.0
Applied flip3--22.0
Applied associate-/r/22.0
Applied prod-diff22.0
Simplified21.8
Simplified21.4
Taylor expanded around inf 21.6
Simplified0.4
Final simplification0.4
herbie shell --seed 2020024 +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)))