\tan \left(x + \varepsilon\right) - \tan x
\left(\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)} + \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}\right) + \left(\left(\frac{{\left(\sin x\right)}^{2} \cdot {\left(\sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{2} \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 \varepsilon\right)}^{3}\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)double f(double x, double eps) {
double r130584 = x;
double r130585 = eps;
double r130586 = r130584 + r130585;
double r130587 = tan(r130586);
double r130588 = tan(r130584);
double r130589 = r130587 - r130588;
return r130589;
}
double f(double x, double eps) {
double r130590 = x;
double r130591 = sin(r130590);
double r130592 = 2.0;
double r130593 = pow(r130591, r130592);
double r130594 = eps;
double r130595 = sin(r130594);
double r130596 = r130593 * r130595;
double r130597 = cos(r130594);
double r130598 = 1.0;
double r130599 = 3.0;
double r130600 = pow(r130591, r130599);
double r130601 = pow(r130595, r130599);
double r130602 = r130600 * r130601;
double r130603 = cos(r130590);
double r130604 = pow(r130603, r130599);
double r130605 = pow(r130597, r130599);
double r130606 = r130604 * r130605;
double r130607 = r130602 / r130606;
double r130608 = r130598 - r130607;
double r130609 = pow(r130603, r130592);
double r130610 = r130608 * r130609;
double r130611 = r130597 * r130610;
double r130612 = r130596 / r130611;
double r130613 = r130608 * r130597;
double r130614 = r130595 / r130613;
double r130615 = r130612 + r130614;
double r130616 = r130593 * r130601;
double r130617 = r130608 * r130605;
double r130618 = r130609 * r130617;
double r130619 = r130616 / r130618;
double r130620 = pow(r130595, r130592);
double r130621 = pow(r130597, r130592);
double r130622 = r130608 * r130621;
double r130623 = r130620 / r130622;
double r130624 = r130591 / r130603;
double r130625 = r130600 / r130604;
double r130626 = r130624 + r130625;
double r130627 = r130623 * r130626;
double r130628 = r130619 + r130627;
double r130629 = r130608 * r130603;
double r130630 = r130591 / r130629;
double r130631 = r130630 - r130624;
double r130632 = r130628 + r130631;
double r130633 = r130615 + r130632;
return r130633;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 14.9 |
| Herbie | 0.4 |
Initial program 37.3
rmApplied tan-sum22.3
rmApplied flip3--22.3
Applied associate-/r/22.3
Simplified22.3
Taylor expanded around inf 22.4
Simplified0.6
rmApplied associate--l+0.4
Final simplification0.4
herbie shell --seed 2020039
(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)))