\tan \left(x + \varepsilon\right) - \tan x
\mathsf{fma}\left(\frac{{\left(\sin x\right)}^{2}}{\cos \varepsilon}, \frac{\sin \varepsilon}{{\left(\cos x\right)}^{2} \cdot \left(1 - \frac{{\left(\sin x \cdot \sin \varepsilon\right)}^{3}}{{\left(\cos x \cdot \cos \varepsilon\right)}^{3}}\right)}, \frac{\sin \varepsilon}{\left(1 - \frac{{\left(\sin x \cdot \sin \varepsilon\right)}^{3}}{{\left(\cos x \cdot \cos \varepsilon\right)}^{3}}\right) \cdot \cos \varepsilon}\right) + \left(\left(\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 \cdot \sin \varepsilon\right)}^{3}}{{\left(\cos x \cdot \cos \varepsilon\right)}^{3}}\right) \cdot {\left(\cos \varepsilon\right)}^{3}}, \frac{\frac{\sin x}{\cos x}}{1 - \frac{{\left(\sin x \cdot \sin \varepsilon\right)}^{3}}{{\left(\cos x \cdot \cos \varepsilon\right)}^{3}}}\right) + \frac{{\left(\sin \varepsilon\right)}^{2}}{{\left(\cos \varepsilon\right)}^{2} \cdot \left(1 - \frac{{\left(\sin x \cdot \sin \varepsilon\right)}^{3}}{{\left(\cos x\right)}^{3} \cdot {\left(\cos \varepsilon\right)}^{3}}\right)} \cdot \left(\frac{{\left(\sin x\right)}^{3}}{{\left(\cos x\right)}^{3}} + \frac{\sin x}{\cos x}\right)\right) - \frac{\sin x}{\cos x}\right)double f(double x, double eps) {
double r112393 = x;
double r112394 = eps;
double r112395 = r112393 + r112394;
double r112396 = tan(r112395);
double r112397 = tan(r112393);
double r112398 = r112396 - r112397;
return r112398;
}
double f(double x, double eps) {
double r112399 = x;
double r112400 = sin(r112399);
double r112401 = 2.0;
double r112402 = pow(r112400, r112401);
double r112403 = eps;
double r112404 = cos(r112403);
double r112405 = r112402 / r112404;
double r112406 = sin(r112403);
double r112407 = cos(r112399);
double r112408 = pow(r112407, r112401);
double r112409 = 1.0;
double r112410 = r112400 * r112406;
double r112411 = 3.0;
double r112412 = pow(r112410, r112411);
double r112413 = r112407 * r112404;
double r112414 = pow(r112413, r112411);
double r112415 = r112412 / r112414;
double r112416 = r112409 - r112415;
double r112417 = r112408 * r112416;
double r112418 = r112406 / r112417;
double r112419 = r112416 * r112404;
double r112420 = r112406 / r112419;
double r112421 = fma(r112405, r112418, r112420);
double r112422 = r112402 / r112408;
double r112423 = pow(r112406, r112411);
double r112424 = pow(r112404, r112411);
double r112425 = r112416 * r112424;
double r112426 = r112423 / r112425;
double r112427 = r112400 / r112407;
double r112428 = r112427 / r112416;
double r112429 = fma(r112422, r112426, r112428);
double r112430 = pow(r112406, r112401);
double r112431 = pow(r112404, r112401);
double r112432 = pow(r112407, r112411);
double r112433 = r112432 * r112424;
double r112434 = r112412 / r112433;
double r112435 = r112409 - r112434;
double r112436 = r112431 * r112435;
double r112437 = r112430 / r112436;
double r112438 = pow(r112400, r112411);
double r112439 = r112438 / r112432;
double r112440 = r112439 + r112427;
double r112441 = r112437 * r112440;
double r112442 = r112429 + r112441;
double r112443 = r112442 - r112427;
double r112444 = r112421 + r112443;
return r112444;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 14.5 |
| Herbie | 0.5 |
Initial program 36.9
rmApplied tan-sum22.3
rmApplied flip3--22.3
Applied associate-/r/22.3
Applied fma-neg22.3
Taylor expanded around -inf 22.5
Simplified0.5
rmApplied unpow-prod-down0.5
Final simplification0.5
herbie shell --seed 2019208 +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)))