x + \left(\tan \left(y + z\right) - \tan a\right)
x + \mathsf{fma}\left(\frac{\tan y + \tan z}{1 - {\left(\tan y \cdot \tan z\right)}^{3}}, 1 + \left(\left(\tan y \cdot \tan z\right) \cdot \left(\tan y \cdot \tan z\right) + 1 \cdot \left(\tan y \cdot \tan z\right)\right), -\tan a\right)double f(double x, double y, double z, double a) {
double r124850 = x;
double r124851 = y;
double r124852 = z;
double r124853 = r124851 + r124852;
double r124854 = tan(r124853);
double r124855 = a;
double r124856 = tan(r124855);
double r124857 = r124854 - r124856;
double r124858 = r124850 + r124857;
return r124858;
}
double f(double x, double y, double z, double a) {
double r124859 = x;
double r124860 = y;
double r124861 = tan(r124860);
double r124862 = z;
double r124863 = tan(r124862);
double r124864 = r124861 + r124863;
double r124865 = 1.0;
double r124866 = r124861 * r124863;
double r124867 = 3.0;
double r124868 = pow(r124866, r124867);
double r124869 = r124865 - r124868;
double r124870 = r124864 / r124869;
double r124871 = r124866 * r124866;
double r124872 = r124865 * r124866;
double r124873 = r124871 + r124872;
double r124874 = r124865 + r124873;
double r124875 = a;
double r124876 = tan(r124875);
double r124877 = -r124876;
double r124878 = fma(r124870, r124874, r124877);
double r124879 = r124859 + r124878;
return r124879;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 13.3
rmApplied tan-sum0.2
rmApplied flip3--0.2
Applied associate-/r/0.2
Applied fma-neg0.2
Final simplification0.2
herbie shell --seed 2020089 +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))))