x + \left(\tan \left(y + z\right) - \tan a\right)
x + \frac{\mathsf{fma}\left(\tan z \cdot \tan y + -1, \sin a, \left(\tan y + \tan z\right) \cdot \cos a\right)}{\left(1 - \log \left(e^{\tan z \cdot \tan y}\right)\right) \cdot \cos a}double f(double x, double y, double z, double a) {
double r114813 = x;
double r114814 = y;
double r114815 = z;
double r114816 = r114814 + r114815;
double r114817 = tan(r114816);
double r114818 = a;
double r114819 = tan(r114818);
double r114820 = r114817 - r114819;
double r114821 = r114813 + r114820;
return r114821;
}
double f(double x, double y, double z, double a) {
double r114822 = x;
double r114823 = z;
double r114824 = tan(r114823);
double r114825 = y;
double r114826 = tan(r114825);
double r114827 = r114824 * r114826;
double r114828 = -1.0;
double r114829 = r114827 + r114828;
double r114830 = a;
double r114831 = sin(r114830);
double r114832 = r114826 + r114824;
double r114833 = cos(r114830);
double r114834 = r114832 * r114833;
double r114835 = fma(r114829, r114831, r114834);
double r114836 = 1.0;
double r114837 = exp(r114827);
double r114838 = log(r114837);
double r114839 = r114836 - r114838;
double r114840 = r114839 * r114833;
double r114841 = r114835 / r114840;
double r114842 = r114822 + r114841;
return r114842;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus a
Initial program 13.3
rmApplied tan-quot13.3
Applied tan-sum0.2
Applied frac-sub0.2
Simplified0.2
rmApplied add-log-exp0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019326 +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.751224e+308)) (or (<= -1.776707e+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.751224e+308)))
(+ x (- (tan (+ y z)) (tan a))))