x + \left(\tan \left(y + z\right) - \tan a\right)
x + \left(\mathsf{fma}\left(\frac{\tan y + \tan z}{1 - \frac{\sin y \cdot \sin z}{\cos z \cdot \cos y} \cdot \left(\tan y \cdot \tan z\right)}, 1 + \frac{\sin y \cdot \sin z}{\cos z \cdot \cos y}, -\tan a\right) + \left(\tan a + \left(-\tan a\right)\right)\right)double f(double x, double y, double z, double a) {
double r105376 = x;
double r105377 = y;
double r105378 = z;
double r105379 = r105377 + r105378;
double r105380 = tan(r105379);
double r105381 = a;
double r105382 = tan(r105381);
double r105383 = r105380 - r105382;
double r105384 = r105376 + r105383;
return r105384;
}
double f(double x, double y, double z, double a) {
double r105385 = x;
double r105386 = y;
double r105387 = tan(r105386);
double r105388 = z;
double r105389 = tan(r105388);
double r105390 = r105387 + r105389;
double r105391 = 1.0;
double r105392 = sin(r105386);
double r105393 = sin(r105388);
double r105394 = r105392 * r105393;
double r105395 = cos(r105388);
double r105396 = cos(r105386);
double r105397 = r105395 * r105396;
double r105398 = r105394 / r105397;
double r105399 = r105387 * r105389;
double r105400 = r105398 * r105399;
double r105401 = r105391 - r105400;
double r105402 = r105390 / r105401;
double r105403 = r105391 + r105398;
double r105404 = a;
double r105405 = tan(r105404);
double r105406 = -r105405;
double r105407 = fma(r105402, r105403, r105406);
double r105408 = r105405 + r105406;
double r105409 = r105407 + r105408;
double r105410 = r105385 + r105409;
return r105410;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 12.9
rmApplied tan-sum0.2
rmApplied add-cube-cbrt0.3
Applied flip--0.3
Applied associate-/r/0.3
Applied prod-diff0.3
Simplified0.2
Simplified0.2
rmApplied tan-quot0.2
Applied tan-quot0.2
Applied frac-times0.2
Simplified0.2
rmApplied tan-quot0.2
Applied tan-quot0.2
Applied frac-times0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019323 +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))))