x + \left(\tan \left(y + z\right) - \tan a\right)
x + \frac{\left(\tan y + \tan z\right) \cdot \cos a - \left(1 - \frac{\sin y \cdot \sin z}{\cos z \cdot \cos y}\right) \cdot \sin a}{\left(1 - \tan y \cdot \tan z\right) \cdot \cos a}double f(double x, double y, double z, double a) {
double r111727 = x;
double r111728 = y;
double r111729 = z;
double r111730 = r111728 + r111729;
double r111731 = tan(r111730);
double r111732 = a;
double r111733 = tan(r111732);
double r111734 = r111731 - r111733;
double r111735 = r111727 + r111734;
return r111735;
}
double f(double x, double y, double z, double a) {
double r111736 = x;
double r111737 = y;
double r111738 = tan(r111737);
double r111739 = z;
double r111740 = tan(r111739);
double r111741 = r111738 + r111740;
double r111742 = a;
double r111743 = cos(r111742);
double r111744 = r111741 * r111743;
double r111745 = 1.0;
double r111746 = sin(r111737);
double r111747 = sin(r111739);
double r111748 = r111746 * r111747;
double r111749 = cos(r111739);
double r111750 = cos(r111737);
double r111751 = r111749 * r111750;
double r111752 = r111748 / r111751;
double r111753 = r111745 - r111752;
double r111754 = sin(r111742);
double r111755 = r111753 * r111754;
double r111756 = r111744 - r111755;
double r111757 = r111738 * r111740;
double r111758 = r111745 - r111757;
double r111759 = r111758 * r111743;
double r111760 = r111756 / r111759;
double r111761 = r111736 + r111760;
return r111761;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Results
Initial program 13.2
rmApplied tan-quot13.2
Applied tan-sum0.2
Applied frac-sub0.2
Taylor expanded around inf 0.2
Final simplification0.2
herbie shell --seed 2019303
(FPCore (x y z a)
:name "(+ x (- (tan (+ y z)) (tan a)))"
:precision binary64
:pre (and (or (== x 0.0) (<= 0.588414199999999998 x 505.590899999999976)) (or (<= -1.79665800000000009e308 y -9.425585000000013e-310) (<= 1.284938e-309 y 1.75122399999999993e308)) (or (<= -1.776707e308 z -8.59979600000002e-310) (<= 3.29314499999998e-311 z 1.72515400000000009e308)) (or (<= -1.79665800000000009e308 a -9.425585000000013e-310) (<= 1.284938e-309 a 1.75122399999999993e308)))
(+ x (- (tan (+ y z)) (tan a))))