x + \left(\tan \left(y + z\right) - \tan a\right)
x + \frac{\left(\tan y + \tan z\right) \cdot \cos a - \left(1 - \tan y \cdot \tan z\right) \cdot \sin a}{\left(1 - \sqrt[3]{{\left(\tan y \cdot \tan z\right)}^{3}}\right) \cdot \cos a}double f(double x, double y, double z, double a) {
double r650 = x;
double r651 = y;
double r652 = z;
double r653 = r651 + r652;
double r654 = tan(r653);
double r655 = a;
double r656 = tan(r655);
double r657 = r654 - r656;
double r658 = r650 + r657;
return r658;
}
double f(double x, double y, double z, double a) {
double r659 = x;
double r660 = y;
double r661 = tan(r660);
double r662 = z;
double r663 = tan(r662);
double r664 = r661 + r663;
double r665 = a;
double r666 = cos(r665);
double r667 = r664 * r666;
double r668 = 1.0;
double r669 = r661 * r663;
double r670 = r668 - r669;
double r671 = sin(r665);
double r672 = r670 * r671;
double r673 = r667 - r672;
double r674 = 3.0;
double r675 = pow(r669, r674);
double r676 = cbrt(r675);
double r677 = r668 - r676;
double r678 = r677 * r666;
double r679 = r673 / r678;
double r680 = r659 + r679;
return r680;
}



Bits error versus x



Bits error versus y



Bits error versus z



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