x + \left(\tan \left(y + z\right) - \tan a\right)
\mathsf{fma}\left(\frac{\tan y + \tan z}{1 - \left(\left(\tan y \cdot \left(\sqrt[3]{\tan z} \cdot \sqrt[3]{\tan z}\right)\right) \cdot \sqrt[3]{\tan z}\right) \cdot \left(\tan y \cdot \tan z\right)}, \mathsf{fma}\left(\tan y, \tan z, 1\right), \left(-\tan a\right) + x\right) + \mathsf{fma}\left(-\tan a, 1, \tan a \cdot 1\right)double f(double x, double y, double z, double a) {
double r152968 = x;
double r152969 = y;
double r152970 = z;
double r152971 = r152969 + r152970;
double r152972 = tan(r152971);
double r152973 = a;
double r152974 = tan(r152973);
double r152975 = r152972 - r152974;
double r152976 = r152968 + r152975;
return r152976;
}
double f(double x, double y, double z, double a) {
double r152977 = y;
double r152978 = tan(r152977);
double r152979 = z;
double r152980 = tan(r152979);
double r152981 = r152978 + r152980;
double r152982 = 1.0;
double r152983 = cbrt(r152980);
double r152984 = r152983 * r152983;
double r152985 = r152978 * r152984;
double r152986 = r152985 * r152983;
double r152987 = r152978 * r152980;
double r152988 = r152986 * r152987;
double r152989 = r152982 - r152988;
double r152990 = r152981 / r152989;
double r152991 = fma(r152978, r152980, r152982);
double r152992 = a;
double r152993 = tan(r152992);
double r152994 = -r152993;
double r152995 = x;
double r152996 = r152994 + r152995;
double r152997 = fma(r152990, r152991, r152996);
double r152998 = r152993 * r152982;
double r152999 = fma(r152994, r152982, r152998);
double r153000 = r152997 + r152999;
return r153000;
}



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 *-un-lft-identity0.2
Applied flip--0.2
Applied associate-/r/0.2
Applied prod-diff0.2
Applied associate-+r+0.2
Simplified0.3
rmApplied add-cube-cbrt0.3
Applied associate-*r*0.3
Final simplification0.3
herbie shell --seed 2020083 +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))))