x + \left(\tan \left(y + z\right) - \tan a\right)
\left(x + \mathsf{fma}\left(\frac{\tan y + \tan z}{1 - {\left(\tan y \cdot \tan z\right)}^{3}}, \mathsf{fma}\left(\tan y \cdot \tan z, \mathsf{fma}\left(\tan y, \tan z, 1\right), 1\right), -\tan a\right)\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 r89189 = x;
double r89190 = y;
double r89191 = z;
double r89192 = r89190 + r89191;
double r89193 = tan(r89192);
double r89194 = a;
double r89195 = tan(r89194);
double r89196 = r89193 - r89195;
double r89197 = r89189 + r89196;
return r89197;
}
double f(double x, double y, double z, double a) {
double r89198 = x;
double r89199 = y;
double r89200 = tan(r89199);
double r89201 = z;
double r89202 = tan(r89201);
double r89203 = r89200 + r89202;
double r89204 = 1.0;
double r89205 = r89200 * r89202;
double r89206 = 3.0;
double r89207 = pow(r89205, r89206);
double r89208 = r89204 - r89207;
double r89209 = r89203 / r89208;
double r89210 = fma(r89200, r89202, r89204);
double r89211 = fma(r89205, r89210, r89204);
double r89212 = a;
double r89213 = tan(r89212);
double r89214 = -r89213;
double r89215 = fma(r89209, r89211, r89214);
double r89216 = r89198 + r89215;
double r89217 = cbrt(r89213);
double r89218 = -r89217;
double r89219 = r89217 * r89217;
double r89220 = r89217 * r89219;
double r89221 = fma(r89218, r89219, r89220);
double r89222 = r89216 + r89221;
return r89222;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 13.3
rmApplied tan-sum0.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.2
Final simplification0.2
herbie shell --seed 2019325 +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))))