x + \left(\tan \left(y + z\right) - \tan a\right)
\mathsf{fma}\left(\frac{\tan y + \tan z}{1 - \sqrt[3]{{\left({\left(\tan y \cdot \tan z\right)}^{3}\right)}^{3}}}, \mathsf{fma}\left(\mathsf{fma}\left(\tan y, \tan z, 1\right), \tan y \cdot \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 r219328 = x;
double r219329 = y;
double r219330 = z;
double r219331 = r219329 + r219330;
double r219332 = tan(r219331);
double r219333 = a;
double r219334 = tan(r219333);
double r219335 = r219332 - r219334;
double r219336 = r219328 + r219335;
return r219336;
}
double f(double x, double y, double z, double a) {
double r219337 = y;
double r219338 = tan(r219337);
double r219339 = z;
double r219340 = tan(r219339);
double r219341 = r219338 + r219340;
double r219342 = 1.0;
double r219343 = r219338 * r219340;
double r219344 = 3.0;
double r219345 = pow(r219343, r219344);
double r219346 = pow(r219345, r219344);
double r219347 = cbrt(r219346);
double r219348 = r219342 - r219347;
double r219349 = r219341 / r219348;
double r219350 = fma(r219338, r219340, r219342);
double r219351 = fma(r219350, r219343, r219342);
double r219352 = a;
double r219353 = tan(r219352);
double r219354 = -r219353;
double r219355 = x;
double r219356 = r219354 + r219355;
double r219357 = fma(r219349, r219351, r219356);
double r219358 = r219353 * r219342;
double r219359 = fma(r219354, r219342, r219358);
double r219360 = r219357 + r219359;
return r219360;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 13.2
rmApplied tan-sum0.2
rmApplied *-un-lft-identity0.2
Applied flip3--0.2
Applied associate-/r/0.2
Applied prod-diff0.2
Applied associate-+r+0.2
Simplified0.3
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020057 +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))))