double f(double x, double eps) {
double r9749579 = x;
double r9749580 = eps;
double r9749581 = r9749579 + r9749580;
double r9749582 = tan(r9749581);
double r9749583 = tan(r9749579);
double r9749584 = r9749582 - r9749583;
return r9749584;
}
double f(double x, double eps) {
double r9749585 = x;
double r9749586 = sin(r9749585);
double r9749587 = eps;
double r9749588 = cos(r9749587);
double r9749589 = cos(r9749585);
double r9749590 = r9749588 * r9749589;
double r9749591 = r9749590 / r9749586;
double r9749592 = r9749586 / r9749591;
double r9749593 = r9749589 / r9749588;
double r9749594 = r9749592 + r9749593;
double r9749595 = sin(r9749587);
double r9749596 = r9749594 * r9749595;
double r9749597 = r9749589 * r9749595;
double r9749598 = r9749586 / r9749590;
double r9749599 = r9749597 * r9749598;
double r9749600 = r9749589 - r9749599;
double r9749601 = r9749596 / r9749600;
return r9749601;
}
\tan \left(x + \varepsilon\right) - \tan x
\frac{\left(\frac{\sin x}{\frac{\cos \varepsilon \cdot \cos x}{\sin x}} + \frac{\cos x}{\cos \varepsilon}\right) \cdot \sin \varepsilon}{\cos x - \left(\cos x \cdot \sin \varepsilon\right) \cdot \frac{\sin x}{\cos \varepsilon \cdot \cos x}}



Bits error versus x




Bits error versus eps
| Original | 36.7 |
|---|---|
| Target | 15.1 |
| Herbie | 0.5 |
Initial program 36.7
rmApplied tan-sum21.5
rmApplied tan-quot21.6
Applied frac-sub21.6
Taylor expanded around inf 0.4
Simplified0.5
Final simplification0.5
herbie shell --seed 2019102
(FPCore (x eps)
:name "2tan (problem 3.3.2)"
:herbie-target
(/ (sin eps) (* (cos x) (cos (+ x eps))))
(- (tan (+ x eps)) (tan x)))