x + \left(\tan \left(y + z\right) - \tan a\right)
\left(\frac{\tan z + \tan y}{1 - \frac{\left(\tan y \cdot \sin z\right) \cdot \left(\tan y \cdot \sin z\right)}{\cos z \cdot \cos z} \cdot \left(\tan y \cdot \tan z\right)} \cdot \left(\left(\tan y \cdot \tan z + \left(\tan y \cdot \tan z\right) \cdot \left(\tan y \cdot \tan z\right)\right) + 1\right) - \tan a\right) + xdouble f(double x, double y, double z, double a) {
double r2078457 = x;
double r2078458 = y;
double r2078459 = z;
double r2078460 = r2078458 + r2078459;
double r2078461 = tan(r2078460);
double r2078462 = a;
double r2078463 = tan(r2078462);
double r2078464 = r2078461 - r2078463;
double r2078465 = r2078457 + r2078464;
return r2078465;
}
double f(double x, double y, double z, double a) {
double r2078466 = z;
double r2078467 = tan(r2078466);
double r2078468 = y;
double r2078469 = tan(r2078468);
double r2078470 = r2078467 + r2078469;
double r2078471 = 1.0;
double r2078472 = sin(r2078466);
double r2078473 = r2078469 * r2078472;
double r2078474 = r2078473 * r2078473;
double r2078475 = cos(r2078466);
double r2078476 = r2078475 * r2078475;
double r2078477 = r2078474 / r2078476;
double r2078478 = r2078469 * r2078467;
double r2078479 = r2078477 * r2078478;
double r2078480 = r2078471 - r2078479;
double r2078481 = r2078470 / r2078480;
double r2078482 = r2078478 * r2078478;
double r2078483 = r2078478 + r2078482;
double r2078484 = r2078483 + r2078471;
double r2078485 = r2078481 * r2078484;
double r2078486 = a;
double r2078487 = tan(r2078486);
double r2078488 = r2078485 - r2078487;
double r2078489 = x;
double r2078490 = r2078488 + r2078489;
return r2078490;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Results
Initial program 13.3
rmApplied tan-sum0.2
rmApplied flip3--0.2
Applied associate-/r/0.2
Simplified0.2
rmApplied tan-quot0.2
Applied associate-*r/0.2
Applied tan-quot0.2
Applied associate-*r/0.2
Applied frac-times0.2
Final simplification0.2
herbie shell --seed 2019152
(FPCore (x y z a)
:name "(+ x (- (tan (+ y z)) (tan a)))"
:pre (and (or (== x 0) (<= 0.5884142 x 505.5909)) (or (<= -1.796658e+308 y -9.425585e-310) (<= 1.284938e-309 y 1.751224e+308)) (or (<= -1.776707e+308 z -8.599796e-310) (<= 3.293145e-311 z 1.725154e+308)) (or (<= -1.796658e+308 a -9.425585e-310) (<= 1.284938e-309 a 1.751224e+308)))
(+ x (- (tan (+ y z)) (tan a))))