x + \left(\tan \left(y + z\right) - \tan a\right)
x + \frac{\left(\left(\tan y \cdot \tan y - \tan z \cdot \tan z\right) \cdot \cos a\right) \cdot \frac{1}{\tan y - \tan z} - \left(1 - \tan y \cdot \tan z\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 r136924 = x;
double r136925 = y;
double r136926 = z;
double r136927 = r136925 + r136926;
double r136928 = tan(r136927);
double r136929 = a;
double r136930 = tan(r136929);
double r136931 = r136928 - r136930;
double r136932 = r136924 + r136931;
return r136932;
}
double f(double x, double y, double z, double a) {
double r136933 = x;
double r136934 = y;
double r136935 = tan(r136934);
double r136936 = r136935 * r136935;
double r136937 = z;
double r136938 = tan(r136937);
double r136939 = r136938 * r136938;
double r136940 = r136936 - r136939;
double r136941 = a;
double r136942 = cos(r136941);
double r136943 = r136940 * r136942;
double r136944 = 1.0;
double r136945 = r136935 - r136938;
double r136946 = r136944 / r136945;
double r136947 = r136943 * r136946;
double r136948 = r136935 * r136938;
double r136949 = r136944 - r136948;
double r136950 = sin(r136941);
double r136951 = r136949 * r136950;
double r136952 = r136947 - r136951;
double r136953 = r136949 * r136942;
double r136954 = r136952 / r136953;
double r136955 = r136933 + r136954;
return r136955;
}



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
rmApplied flip-+0.2
Applied associate-*l/0.2
rmApplied div-inv0.3
Final simplification0.3
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))))