x + \left(\tan \left(y + z\right) - \tan a\right)
x + \left(\frac{\tan y + \tan z}{1 - \sqrt[3]{{\left(\tan y \cdot \tan z\right)}^{3}}} - \tan a\right)double f(double x, double y, double z, double a) {
double r138132 = x;
double r138133 = y;
double r138134 = z;
double r138135 = r138133 + r138134;
double r138136 = tan(r138135);
double r138137 = a;
double r138138 = tan(r138137);
double r138139 = r138136 - r138138;
double r138140 = r138132 + r138139;
return r138140;
}
double f(double x, double y, double z, double a) {
double r138141 = x;
double r138142 = y;
double r138143 = tan(r138142);
double r138144 = z;
double r138145 = tan(r138144);
double r138146 = r138143 + r138145;
double r138147 = 1.0;
double r138148 = r138143 * r138145;
double r138149 = 3.0;
double r138150 = pow(r138148, r138149);
double r138151 = cbrt(r138150);
double r138152 = r138147 - r138151;
double r138153 = r138146 / r138152;
double r138154 = a;
double r138155 = tan(r138154);
double r138156 = r138153 - r138155;
double r138157 = r138141 + r138156;
return r138157;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Results
Initial program 13.4
rmApplied tan-sum0.2
rmApplied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020034 +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))))