x + \left(\tan \left(y + z\right) - \tan a\right)
x + \frac{\frac{\mathsf{fma}\left(\mathsf{fma}\left(\tan z, \tan y, -1\right), \sin a, \cos a \cdot \left(\frac{\sin z}{\cos z} + \frac{\sin y}{\cos y}\right)\right)}{1 - \tan y \cdot \tan z}}{\cos a}double f(double x, double y, double z, double a) {
double r142456 = x;
double r142457 = y;
double r142458 = z;
double r142459 = r142457 + r142458;
double r142460 = tan(r142459);
double r142461 = a;
double r142462 = tan(r142461);
double r142463 = r142460 - r142462;
double r142464 = r142456 + r142463;
return r142464;
}
double f(double x, double y, double z, double a) {
double r142465 = x;
double r142466 = z;
double r142467 = tan(r142466);
double r142468 = y;
double r142469 = tan(r142468);
double r142470 = -1.0;
double r142471 = fma(r142467, r142469, r142470);
double r142472 = a;
double r142473 = sin(r142472);
double r142474 = cos(r142472);
double r142475 = sin(r142466);
double r142476 = cos(r142466);
double r142477 = r142475 / r142476;
double r142478 = sin(r142468);
double r142479 = cos(r142468);
double r142480 = r142478 / r142479;
double r142481 = r142477 + r142480;
double r142482 = r142474 * r142481;
double r142483 = fma(r142471, r142473, r142482);
double r142484 = 1.0;
double r142485 = r142469 * r142467;
double r142486 = r142484 - r142485;
double r142487 = r142483 / r142486;
double r142488 = r142487 / r142474;
double r142489 = r142465 + r142488;
return r142489;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 13.2
rmApplied tan-quot13.2
Applied tan-sum0.2
Applied frac-sub0.2
Simplified0.2
Taylor expanded around inf 0.2
rmApplied associate-/r*0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019322 +o rules:numerics
(FPCore (x y z a)
:name "(+ x (- (tan (+ y z)) (tan a)))"
:precision binary64
:pre (and (or (== x 0.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))))