x + \left(\tan \left(y + z\right) - \tan a\right)
\mathsf{fma}\left(\frac{\tan y + \tan z}{1 - {\left(\frac{\tan y \cdot \sin z}{\cos z}\right)}^{3}}, \mathsf{fma}\left(\frac{\tan y \cdot \sin z}{\cos z}, 1 + \frac{\tan y \cdot \sin z}{\cos z}, 1\right), \left(-\tan a\right) + x\right) + \mathsf{fma}\left(-\sqrt[3]{\tan a}, \sqrt[3]{\tan a} \cdot \sqrt[3]{\tan a}, \sqrt[3]{\tan a} \cdot \left(\sqrt[3]{\tan a} \cdot \sqrt[3]{\tan a}\right)\right)double f(double x, double y, double z, double a) {
double r216081 = x;
double r216082 = y;
double r216083 = z;
double r216084 = r216082 + r216083;
double r216085 = tan(r216084);
double r216086 = a;
double r216087 = tan(r216086);
double r216088 = r216085 - r216087;
double r216089 = r216081 + r216088;
return r216089;
}
double f(double x, double y, double z, double a) {
double r216090 = y;
double r216091 = tan(r216090);
double r216092 = z;
double r216093 = tan(r216092);
double r216094 = r216091 + r216093;
double r216095 = 1.0;
double r216096 = sin(r216092);
double r216097 = r216091 * r216096;
double r216098 = cos(r216092);
double r216099 = r216097 / r216098;
double r216100 = 3.0;
double r216101 = pow(r216099, r216100);
double r216102 = r216095 - r216101;
double r216103 = r216094 / r216102;
double r216104 = r216095 + r216099;
double r216105 = fma(r216099, r216104, r216095);
double r216106 = a;
double r216107 = tan(r216106);
double r216108 = -r216107;
double r216109 = x;
double r216110 = r216108 + r216109;
double r216111 = fma(r216103, r216105, r216110);
double r216112 = cbrt(r216107);
double r216113 = -r216112;
double r216114 = r216112 * r216112;
double r216115 = r216112 * r216114;
double r216116 = fma(r216113, r216114, r216115);
double r216117 = r216111 + r216116;
return r216117;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 13.7
rmApplied tan-sum0.2
rmApplied tan-quot0.2
Applied associate-*r/0.2
rmApplied add-cube-cbrt0.3
Applied flip3--0.3
Applied associate-/r/0.3
Applied prod-diff0.3
Applied associate-+r+0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020018 +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.7512240000000001e+308)) (or (<= -1.7767070000000002e+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.7512240000000001e+308)))
(+ x (- (tan (+ y z)) (tan a))))