\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) + \frac{\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} \cdot \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} \cdot \frac{\sin x}{\cos x}}{\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) + \mathsf{fma}\left(-\tan x, 1, \tan x\right)double f(double x, double eps) {
double r141001 = x;
double r141002 = eps;
double r141003 = r141001 + r141002;
double r141004 = tan(r141003);
double r141005 = tan(r141001);
double r141006 = r141004 - r141005;
return r141006;
}
double f(double x, double eps) {
double r141007 = eps;
double r141008 = sin(r141007);
double r141009 = 1.0;
double r141010 = x;
double r141011 = sin(r141010);
double r141012 = 3.0;
double r141013 = pow(r141011, r141012);
double r141014 = pow(r141008, r141012);
double r141015 = r141013 * r141014;
double r141016 = cos(r141010);
double r141017 = pow(r141016, r141012);
double r141018 = cos(r141007);
double r141019 = pow(r141018, r141012);
double r141020 = r141017 * r141019;
double r141021 = r141015 / r141020;
double r141022 = r141009 - r141021;
double r141023 = r141022 * r141018;
double r141024 = r141008 / r141023;
double r141025 = 2.0;
double r141026 = pow(r141011, r141025);
double r141027 = pow(r141016, r141025);
double r141028 = r141026 / r141027;
double r141029 = r141022 * r141019;
double r141030 = r141014 / r141029;
double r141031 = r141026 * r141008;
double r141032 = r141022 * r141027;
double r141033 = r141018 * r141032;
double r141034 = r141031 / r141033;
double r141035 = fma(r141028, r141030, r141034);
double r141036 = r141024 + r141035;
double r141037 = pow(r141008, r141025);
double r141038 = pow(r141018, r141025);
double r141039 = r141022 * r141038;
double r141040 = r141037 / r141039;
double r141041 = r141011 / r141016;
double r141042 = r141013 / r141017;
double r141043 = r141041 + r141042;
double r141044 = r141040 * r141043;
double r141045 = r141036 + r141044;
double r141046 = r141022 * r141016;
double r141047 = r141011 / r141046;
double r141048 = r141047 * r141047;
double r141049 = r141041 * r141041;
double r141050 = r141048 - r141049;
double r141051 = r141047 + r141041;
double r141052 = r141050 / r141051;
double r141053 = r141045 + r141052;
double r141054 = tan(r141010);
double r141055 = -r141054;
double r141056 = fma(r141055, r141009, r141054);
double r141057 = r141053 + r141056;
return r141057;
}




Bits error versus x




Bits error versus eps
| Original | 37.5 |
|---|---|
| Target | 15.0 |
| Herbie | 0.5 |
Initial program 37.5
rmApplied tan-sum22.4
rmApplied add-cube-cbrt22.9
Applied flip3--22.9
Applied associate-/r/22.9
Applied prod-diff23.0
Simplified22.8
Simplified22.4
Taylor expanded around inf 22.5
Simplified0.4
rmApplied flip--0.5
Final simplification0.5
herbie shell --seed 2019353 +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)))