\tan \left(x + \varepsilon\right) - \tan x
\mathsf{fma}\left(\frac{{\left(\sin x\right)}^{2}}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}, \frac{\sin \varepsilon}{\left(\frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon} + 1\right) \cdot \left(\cos \varepsilon \cdot {\left(\cos x\right)}^{2}\right)}, \mathsf{fma}\left(\frac{\sin x}{1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}, \frac{{\left(\sin \varepsilon\right)}^{2}}{{\left(\cos \varepsilon\right)}^{2} \cdot \left(\left(\frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon} + 1\right) \cdot \cos x\right)}, \frac{\sin \varepsilon}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \left(\left(\frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon} + 1\right) \cdot \cos \varepsilon\right)}\right)\right) + \left(\frac{\sin x}{\left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right) \cdot \left(\left(\frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon} + 1\right) \cdot \cos x\right)} - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r144032 = x;
double r144033 = eps;
double r144034 = r144032 + r144033;
double r144035 = tan(r144034);
double r144036 = tan(r144032);
double r144037 = r144035 - r144036;
return r144037;
}
double f(double x, double eps) {
double r144038 = x;
double r144039 = sin(r144038);
double r144040 = 2.0;
double r144041 = pow(r144039, r144040);
double r144042 = 1.0;
double r144043 = eps;
double r144044 = sin(r144043);
double r144045 = r144039 * r144044;
double r144046 = cos(r144038);
double r144047 = cos(r144043);
double r144048 = r144046 * r144047;
double r144049 = r144045 / r144048;
double r144050 = r144042 - r144049;
double r144051 = r144041 / r144050;
double r144052 = r144049 + r144042;
double r144053 = pow(r144046, r144040);
double r144054 = r144047 * r144053;
double r144055 = r144052 * r144054;
double r144056 = r144044 / r144055;
double r144057 = r144039 / r144050;
double r144058 = pow(r144044, r144040);
double r144059 = pow(r144047, r144040);
double r144060 = r144052 * r144046;
double r144061 = r144059 * r144060;
double r144062 = r144058 / r144061;
double r144063 = r144052 * r144047;
double r144064 = r144050 * r144063;
double r144065 = r144044 / r144064;
double r144066 = fma(r144057, r144062, r144065);
double r144067 = fma(r144051, r144056, r144066);
double r144068 = r144050 * r144060;
double r144069 = r144039 / r144068;
double r144070 = r144039 / r144046;
double r144071 = r144069 - r144070;
double r144072 = r144067 + r144071;
return r144072;
}




Bits error versus x




Bits error versus eps
| Original | 37.3 |
|---|---|
| Target | 14.9 |
| Herbie | 0.7 |
Initial program 37.3
rmApplied tan-sum22.3
rmApplied flip--22.3
Applied associate-/r/22.3
Simplified22.3
Taylor expanded around inf 22.5
Simplified0.7
Final simplification0.7
herbie shell --seed 2020039 +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)))