x + \left(\tan \left(y + z\right) - \tan a\right)
x + \frac{\frac{\mathsf{fma}\left(\mathsf{fma}\left(\tan z, \tan y, -1\right), \sin a, \left(\tan y + \tan z\right) \cdot \cos a\right)}{1 - \left(\tan z \cdot \tan y\right) \cdot \left(\tan z \cdot \tan y\right)}}{\cos a} \cdot \left(1 + \tan y \cdot \tan z\right)double f(double x, double y, double z, double a) {
double r118744 = x;
double r118745 = y;
double r118746 = z;
double r118747 = r118745 + r118746;
double r118748 = tan(r118747);
double r118749 = a;
double r118750 = tan(r118749);
double r118751 = r118748 - r118750;
double r118752 = r118744 + r118751;
return r118752;
}
double f(double x, double y, double z, double a) {
double r118753 = x;
double r118754 = z;
double r118755 = tan(r118754);
double r118756 = y;
double r118757 = tan(r118756);
double r118758 = -1.0;
double r118759 = fma(r118755, r118757, r118758);
double r118760 = a;
double r118761 = sin(r118760);
double r118762 = r118757 + r118755;
double r118763 = cos(r118760);
double r118764 = r118762 * r118763;
double r118765 = fma(r118759, r118761, r118764);
double r118766 = 1.0;
double r118767 = r118755 * r118757;
double r118768 = r118767 * r118767;
double r118769 = r118766 - r118768;
double r118770 = r118765 / r118769;
double r118771 = r118770 / r118763;
double r118772 = r118757 * r118755;
double r118773 = r118766 + r118772;
double r118774 = r118771 * r118773;
double r118775 = r118753 + r118774;
return r118775;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 13.2
rmApplied tan-quot13.2
Applied tan-sum0.2
Applied frac-sub0.2
Simplified0.2
rmApplied flip--0.2
Applied associate-*l/0.2
Applied associate-/r/0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019303 +o rules:numerics
(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))))